Java 无法再次插入行,因为生成的id等于第一次插入时生成的id
我使用以下方法将电影收藏夹添加到Java 无法再次插入行,因为生成的id等于第一次插入时生成的id,java,mysql,jdbc,Java,Mysql,Jdbc,我使用以下方法将电影收藏夹添加到favorite表中。我的问题是,当我按下一部特定电影的心形图标时,执行Java代码的JavaScript事件运行良好,电影收藏夹被添加到收藏夹表中,但当我在同一部或不同的电影上第二次按下心形图标时,收藏夹没有被添加。这发生在我使用Hibernate和下面的常规SQL连接时。该ID在PHPMyAdmin中设置为自动生成 当我添加preparedStmt.getGeneratedKeys()时为了调试并查看生成了什么键,我第一次按下heart时工作正常,即返回的ID
favorite
表中。我的问题是,当我按下一部特定电影的心形图标时,执行Java代码的JavaScript事件运行良好,电影收藏夹被添加到收藏夹表中,但当我在同一部或不同的电影上第二次按下心形图标时,收藏夹没有被添加。这发生在我使用Hibernate和下面的常规SQL连接时。该ID在PHPMyAdmin中设置为自动生成
当我添加preparedStmt.getGeneratedKeys()时
为了调试并查看生成了什么键,我第一次按下heart时工作正常,即返回的ID是表上的最后一个ID号+1,为了便于解释,假设表中有48行,执行查询后返回的ID是49,并且添加了该行。但是,当我第二次按另一个心脏图标时,返回的ID仍然是49,而不是50,并且自然会忽略此查询,并且不会添加行,因为该ID已经存在于表中。我不确定这是什么原因造成的。If感觉好像有某种缓存在进行,但我可能错了
public String insertFavorite(int userID, int movieID, String genre) {
String inserted = "false";
String query = " insert into favorite (userID, movieID, genre)" + " values (?, ?, ?)";
// create the mysql insert preparedstatement
PreparedStatement preparedStmt;
try {
preparedStmt = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
preparedStmt.setInt(1, userID);
preparedStmt.setInt(2, movieID);
preparedStmt.setString(3, genre);
// execute the preparedstatement
preparedStmt.executeUpdate();
ResultSet rs = preparedStmt.getGeneratedKeys();
int i = -1;
if (rs.next()) {
i = rs.getInt(1);
}
inserted = Integer.toString(i);
} catch (SQLException e) {
// TODO Auto-generated catch block
inserted = e.getMessage();
}
return inserted;
}