PreparedStatement.executeBatch()之后的getGeneratedKeys()

问题描述 投票:12回答:1

我想使用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生成的PK,我得到这个SQLServerException

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

对于每次执行的插入,我期望获得一行ResultSet,因此我可以生成每个PK。

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

java sql-server jdbc prepared-statement
1个回答
9
投票

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

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.