【发布时间】:2021-02-20 00:17:38
【问题描述】:
您好,感谢您的阅读。 我正在尝试检索新插入数据的 ID,但我总是得到一个空的 ResultSet。
Connection con = main.getCon();
String sqlCommand = "Insert Into Relations(name,explanation) values(?,?)";
PreparedStatement state =
con.prepareStatement(sqlCommand,Statement.RETURN_GENERATED_KEYS);
state.setString(1,name.getText());
state.setString(2,explanation.getText());
int affectedRows = state.executeUpdate();
assert (affectedRows>0);
ResultSet rs = state.getGeneratedKeys();
assert rs.next();
int instertedID= rs.getInt("ID");
不知道有什么问题。在线检查了不同的样本,但无法弄清楚我的错误是什么。
我也用 Statement 尝试过,但也没有运气。
第1点:代码运行顺利,我的数据插入数据库。
第2点:网上有这个案例的例子,你可以在这里查看:
https://www.baeldung.com/jdbc-returning-generated-keys
我刚刚意识到我的 ResultSet 不是空的,我在使用调试器时遇到了问题,这就是为什么我认为它是空的。 正如 Mark Rotteveel 在评论中提到的,问题出在“断言”声明上。
【问题讨论】:
-
您使用的是哪个数据库系统?您的问题很可能是您正在使用
assert rs.next()。在正常的 Java 执行中(除非指定了-ea),断言被禁用,因此不会执行,这意味着您永远不会将结果集放在第一行。请改用if (rs.next()) { ... } -
您是对的,先生,断言是问题所在。您能否将其作为答案,以便我可以选择它并关闭该主题?非常感谢。很抱歉,我的调试器显示我的 ResultSet 为空,这就是我为我的问题选择这个标题的原因。我用过德比。
-
我已根据我的评论添加了答案。