java - 在插入语句后返回具有自动递增 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
解决方案
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()
推荐阅读
- android - 从 SearchView onQueryTextSubmit 创建时视图不显示
- session - 我在我的 laravel 应用程序上收到一条错误消息:从空值创建默认对象
- python - 是否可以将 RGB 图像转换为索引颜色,以便每个索引颜色对应于 Python 中矩阵形式的正确 RGB 颜色?
- google-colaboratory - 在 Google Colabs 中使用 Timer 模块时答案不正确
- tibco-ems - Neoload如何连接tibco服务器。获取无法实例化类:om.tibco.tibjms.TibjmsQueueConnectionFactory 错误
- c# - 落地时失去生命
- reactjs - react-native 中另一个水平滚动视图中的水平滚动视图
- r - 在每个值 x 轴的平均值上设置发散色标
- refresh - 制表器在数据刷新时突出显示条目
- docker - 如何将参数传递给特定于少数脚本而不是入口点的 docker run 命令