使用PreparedStatement的getGeneratedKeys()无法在Java中找到生成的密钥

我有一个查询如下:
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()有一些东西;
那令我困惑.

我究竟做错了什么?

提前致谢

解决方法

我希望你回来的看起来像字符串的“密钥”是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 ?";

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...