如何在使用java预处理语句Batch时获取表的自动生成键?一种方法是迭代返回的结果集?有没有其他有效的方法呢?
答案 0 :(得分:1)
使用Statement
或PreparedStatement
对象中的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