PreparedStatement.executeBatch()之后的getGeneratedKeys()

时间:2012-11-30 08:57:17

标签: java sql-server jdbc prepared-statement

我希望INSERT使用PreparedStatement

ps = con.prepareStatement(query,PreparedStatement.RETURN_GENERATED_KEYS); for(Element e:listOfElements){ ps.setString(1,this.col_val_1); ps.setString(2,this.col_val_2); ps.setInt(3,this.col_val_3); ps.addBatch(); } ps.executeBatch(); ResultSet rs = ps.getGeneratedKeys(); 几行
INSERT

此时,我希望为每个SQLServerException生成PK,我得到com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained.

{{1}}

我希望每次执行插入都得到一行ResultSet,这样我就可以生成每个PK。

我怀疑错了吗?难道我做错了什么?可以使用批处理执行以不同的方式完成吗?

1 个答案:

答案 0 :(得分:9)

批处理执行的getGeneratedKeys()支持是根据JDBC规范定义的实现。很可能SQL Server驱动程序不支持批处理执行。

我试图在Microsoft网站上查找明确的声明,但找不到它。 MSDN上这篇旧的(2007)论坛帖子确实声明它不受支持:http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/6cbf5eea-e5b9-4519-8e86-f4b65ce3f8e1