【发布时间】:2017-01-18 17:13:21
【问题描述】:
我想使用 JDBC 批处理语句在数据库(即 DB2)中插入一批记录,然后获取插入行的自动生成的 ID。如何使用 JDBC API 实现?
示例代码:
String SQL_INSERT = "INSERT INTO TABLE1 (CURRENT_TIMESTAMP) VALUES (?) ";
Connection connection = DriverManager.getConnection("jdbc:db2://localhost:900/DATABASE");
PreparedStatement statement = connection.prepareStatement(SQL_INSERT, Statement.RETURN_GENERATED_KEYS);
// first batch
statement.setTimestamp(1, getCurrentTimestamp());
statement.addBatch();
// second batch
statement.setTimestamp(1, getCurrentTimestamp());
statement.addBatch();
int[] insertedRows = statement.executeBatch();
ResultSet generatedKeys = statement.getGeneratedKeys();
批处理语句成功执行,所有行都插入数据库。但是当调用getGeneratedKeys() 来检索生成的密钥时,它返回一个空的ResultSet。有什么想法,为什么?
【问题讨论】:
-
批量执行时是否支持检索生成的密钥取决于实现。 JDBC 不需要支持。
-
您是否尝试过使用
int[]或String[]指定自动生成的列的变体? -
@Stavr00 是的,我在
PreparedStatement中尝试了变体int[]或String[]进行批处理,ResultSet在getGeneratedKeys()方法上为空。 -
您可能必须使用
FINAL TABLE特殊对象来返回插入的元素 -
JDBC 驱动程序支持
getGeneratedKeys()方法,否则应该抛出SQLFeatureNotSupportedException异常。