Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法再次插入行,因为生成的id等于第一次插入时生成的id_Java_Mysql_Jdbc - Fatal编程技术网

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;
}