[oracle]无法找到生成的密钥在 Java 中使用带的 getGeneratedKeys()

标签: sql Java Oracle
发布时间: 2017/5/5 19:35:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个查询,如下所示︰

String SQL = "insert into table (id, name) values (sequence.nextval, ?)";

我然后让带像这样︰

//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
}

当执行和调试,调试点时,我看到我的结果集仅有一把钥匙,一个字符串-不像我期望在所有的 id。检查的数据库,一切工作正常时, 插入的 id 和一切。还有一些关于getGeneratedKeys();这让我迷惑。

我到底做错了?

在此先感谢

解决方法 1:

我期望"的关键,"你要回来,看上去像一个字符串是 ROWID — — 这是直接生成数据库的唯一关键。 你应该能够改变,要想让你 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 ?";
赞助商