的getGeneratedKeys()了PreparedStatement.executeBatch

2019-07-04 07:34发布

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

在这一点上,我了when期望获得PK的每一个产生INSERT ,我得到这个SQLServerException

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

我希望得到一个结果有一行执行的每个插入,这样我就可以得到每个PK产生。

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

Answer 1:

用于支持getGeneratedKeys()根据JDBC规范上批处理执行被实现定义。 最有可能的SQL Server驱动程序不支持批量执行。

我试图寻找微软网站上明确说明,但无法找到它。 这种旧的(2007)论坛在MSDN上后确实状态,它是不支持: http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/6cbf5eea-e5b9-4519-8e86-f4b65ce3f8e1



文章来源: getGeneratedKeys() after PreparedStatement.executeBatch()