PreparedStatement之后的java getGeneratedKeys()。executeBatch()
我想使用PreparedStatement
来INSERT
几行:
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.
我希望得到一个结果集,每个插入都有一行,这样我就可以生成每个PK
我预期错了吗?我做错什么了吗?可以使用批处理执行以不同的方式完成吗
# 1 楼答案
根据JDBC规范的实现定义了对批执行
getGeneratedKeys()
的支持。SQL Server驱动程序很可能不支持批执行我试图在微软网站上寻找明确的声明,但没找到。这篇关于MSDN的旧(2007)论坛帖子确实声明它不受支持:http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/6cbf5eea-e5b9-4519-8e86-f4b65ce3f8e1