我有一个查询如下:
String SQL = "insert into table (id, name) values (sequence.nextval, ?)";
然后我像这样制作一个 PreparedStatement:
//initiate connection, statement etc
pStatement = connection.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
pStatement.setString(1,'blabla');
pStatement.executeUpdate();
ResultSet rs = pStatement.getGeneratedKeys();
while (rs.next()){
//debugging here to see what rs has
}
在那个调试点执行和调试时,我看到我的 ResultSet 只有一个键,一个字符串——完全不像我期望的 ID。检查数据库时一切正常,插入了 id 和一切。 getGeneratedKeys(); 有点问题 这让我很困惑。
我做错了什么?
提前致谢
最佳答案
我希望您返回的看起来像字符串的“ key ”是 ROWID
-- 这是数据库直接生成的唯一 key 。您应该能够更改它以恢复您的 id
列(这可能需要适度最新版本的 JDBC 驱动程序)。
//initiate connection, statement etc
String generatedColumns[] = {"ID"};
pStatement = connection.prepareStatement(SQL, generatedColumns);
pStatement.setString(1,'blabla');
pStatement.executeUpdate();
ResultSet rs = pStatement.getGeneratedKeys();
while (rs.next()){
//debugging here to see what rs has
}
您还可以更改查询以显式添加 RETURNING
子句
String SQL = "insert into table (id, name) " +
" values (sequence.nextval, ?) " +
" returning id into ?";
关于java - 无法使用 PreparedStatement 的 getGeneratedKeys() 在 Java 中找到生成的 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9998781/