12

我想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();

此时,当我希望为每个生成 PK 时INSERT,我得到了这个SQLServerException

com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained.

我希望为每个执行的插入获得一个包含一行的 ResultSet,这样我就可以生成每个 PK。

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

4

1 回答 1

10

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

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

于 2012-11-30T09:42:51.823 回答