Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Oracle数据库中获取自动递增的PK?_Java_Oracle_Jdbc_Sequence - Fatal编程技术网

Java 如何从Oracle数据库中获取自动递增的PK?

Java 如何从Oracle数据库中获取自动递增的PK?,java,oracle,jdbc,sequence,Java,Oracle,Jdbc,Sequence,可能重复: 我已经实现了一个触发器和一个自动递增PK序列,我使用Oracle10g作为数据库。 现在我想使用JAVA插入一些东西,但我需要在插入之后立即将递增的PK保存在一个变量中。我试过这个: PreparedStatement pstmt = connection.prepareStatement("INSERT INTO sometable VALUES(?, ?)",

可能重复:

我已经实现了一个触发器和一个自动递增PK序列,我使用Oracle10g作为数据库。 现在我想使用JAVA插入一些东西,但我需要在插入之后立即将递增的PK保存在一个变量中。我试过这个:

PreparedStatement pstmt = connection.prepareStatement("INSERT INTO sometable 
                                                       VALUES(?, ?)", 
                                                      Statement.RETURN_GENERATED_KEYS);
pstmt.setInt(1, 5);
pstmt.setString(2, "Username");
pstmt.executeUpdate();
ResultSet resultSet = pstmt.getGeneratedKeys();

但是它不起作用。

是表的候选键吗?如果是,您可以在插入后运行
选择
,以查找生成PK的值。或者,您可以去掉触发器,从Java中的DB中获取
序列的下一个值,并将其用作
插入的主键。这种方法的缺点是,来自其他应用程序的插入也必须这样做。

您需要指定要检索的可能生成的密钥

PreparedStatement  pstmt = conn.prepareStatement(sql,new String [] {"ID_ORDER"});
请注意,列名区分大小写。最后,需要JDBC 3.0驱动程序和Oracle 10g R2或更高版本

您可以通过检查数据库元数据来检查当前安装是否支持此机制:

DatabaseMetaData metaData =  conn.getMetaData();
log("SupportsGetGeneratedKeys?="+metaData.supportsGetGeneratedKeys());

更多信息:

我非常确定,在尝试获取生成的密钥之前,您需要执行该语句。很抱歉,这是一个错误,我忘了在问题中写这一行。在我的代码中,该语句已经执行,并且不起作用。