您好,感谢您的阅读。我试图检索新插入数据的 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");
Run Code Online (Sandbox Code Playgroud)
不知道出了什么问题。在线检查了不同的样本,但无法弄清楚我的错误是什么。我也尝试过使用 Statement,但也没有运气。
第 1 点:代码运行顺利,我的数据已插入数据库。第2点:网上有针对这种情况的示例,您可以在这里查看:
https: //www.baeldung.com/jdbc-returning- generated -keys
我刚刚意识到我的 ResultSet 不为空,我在使用调试器时遇到问题,这就是为什么我认为它是空的。正如 Mark Rotteveel 在评论中提到的,问题出在“assert”语句上。
问题是你使用的assert rs.next(). Java 中的断言旨在检查不变量(例如在测试期间),但是当您正常运行 Java 时,assert不会执行语句,只有在使用-ea命令行选项显式启用此功能时才会执行它们。
因此,rs.next()不会被调用,因此当您调用 时,您的结果集仍然位于第一行之前rs.getInt(1)。而是使用if (rs.next()) { ... }.