getGenerateKeys() 返回一个空结果集

Lit*_*hdy 2 java jdbc derby

您好,感谢您的阅读。我试图检索新插入数据的 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”语句上。

Mar*_*eel 5

问题是你使用的assert rs.next(). Java 中的断言旨在检查不变量(例如在测试期间),但是当您正常运行 Java 时,assert不会执行语句,只有在使用-ea命令行选项显式启用此功能时才会执行它们。

因此,rs.next()不会被调用,因此当您调用 时,您的结果集仍然位于第一行之前rs.getInt(1)。而是使用if (rs.next()) { ... }.