如何在使用java预处理语句Batch时获取表的自动生成键?

时间:2011-11-17 06:37:22

标签: java

如何在使用java预处理语句Batch时获取表的自动生成键?一种方法是迭代返回的结果集?有没有其他有效的方法呢?

4 个答案:

答案 0 :(得分:1)

使用StatementPreparedStatement对象中的getGeneratedKeys()方法来识别新的自动生成值。迭代返回的ResultSet对象,以批处理语句的顺序获取新生成的键值。

编辑:如果您使用的JDBC驱动程序不支持此方法,则此调用可能会抛出java.sql.SQLFeatureNotSupportedException

答案 1 :(得分:0)

据我所知,您需要通过预准备语句检索结果集,并且需要获取该自动生成的密钥字段名。

假设自动生成的字段名称为“ID”,而表名为学生

然后你需要通过查询检索结果集,例如从学生中选择id。

然后您将获得包含Id的结果集对象。

要检索,

resultsetobj.getString(0);

OR

resultsetobj.getString("Id");

答案 2 :(得分:0)

我认为在RDBMS之外设置记录的id(数字自动编号)是非常危险的,如果有另一个用户执行与您同时执行相同的操作,则可能会导致冲突。 如果你想知道下一个持久记录的id是什么,你必须在持久化之后重新查询它。除非您打算使用ORM来帮助您这样做。通过使用ORM,您不需要重新查询,只需保留记录,您将获得分配给它的ID,。

希望这有帮助,

答案 3 :(得分:0)

我认为您需要使用OUTPUT子句,如下所示:

--====== make our test table to insert to
Create Table InsertIDTst(
        ID int identity primary key
        , ColName nvarchar(255)
        , object_id int);
GO

--====== make a table variable to hold the new ID's
Declare @IDList Table(ID int);

--====== insert a bunch of rows, 
--              and save the new IDs at the same time
INSERT into InsertIDTst(ColName, object_id)
 Output INSERTED.ID Into @IDList(ID)
 Select name, object_id
 From sys.columns

--====== show that we have the new IDs
SELECT * from @IDList