首页 > 解决方案 > 在插入语句后返回具有自动递增 ID 的 int

问题描述

我正在尝试使用 GetGeneratedKey 方法将刚刚创建的表 ID 作为 int 返回。但这不起作用。

我的代码

    public int saveWorkout(String titel, String beschrijving, int categorie_id, int persoon_id) throws SQLException {
    int result = 0;
    try (Connection con = super.getConnection()) {
        String query = "INSERT INTO \"Workout\" VALUES(?,?,?,?)";
        String query2 = "INSERT INTO \"Workout_Oefening\" VALUES(?,?)";
        PreparedStatement pstmt = con.prepareStatement(query);
        pstmt.setString(1, titel);
        pstmt.setString(2, beschrijving);
        pstmt.setInt(3, persoon_id);
        pstmt.setInt(4, categorie_id);
        pstmt.executeUpdate();
        ResultSet keys = pstmt.getGeneratedKeys();
        if(keys.next()) {
            result = keys.getInt(1);
            System.out.println(keys.getInt(1));
        }

    } catch (SQLException sqle) {
        sqle.printStackTrace();
    }
    return result;
}

它总是返回 0!如果我打印 keys.getint(1) 东西,它会返回以下内容

org.apache.tomcat.dbcp.dbcp2.DelegatingResultSet@8a14f70

标签: javajdbckeyprepared-statement

解决方案


if(keys.next()) {
            keys.next(); //This is being called 2nd time.
            result = keys.getInt(1);
            System.out.println(keys.getInt(1));
        }

问题出在您的第二行 keys.next();

您调用它两次,即使在 if 条件下,它也会遍历到下一行。

用这个替换你的代码,我认为它会正常工作

if(keys.next()) {
                result = keys.getInt(1);
                System.out.println(keys.getInt(1));
            }

参考:https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#next()


推荐阅读