java - 无法使用 PreparedStatement 的 getGeneratedKeys() 在 Java 中找到生成的 key

标签 java sql oracle prepared-statement auto-increment

我有一个查询如下:

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/

相关文章:

java - 向 ActionBar 项目添加监听器,onOptionsItemSelected NullPointerException

java - 用多态替换条件

sql - 如何比较不同数据库中的两个表

mysql - filemaker 小结的 sql 等价物是什么?

python - 我如何解决ORA-01704 : string literal too long error in Python cx_oracle?

oracle - 在 SQLPlus 上执行脚本时,它打印数字序列而不是输出

java - 将自定义 CRM 与 GOautodial 结合使用

java - 如何使用java替换无效字符

php - 根据sql中的另一个表列值创建表列

java - ORA-00933 SQL 命令未正确结束但在 SQL Developer 中正常