我需要帮助在同一个preparedStatement中获取受一系列更新语句影响的行数。
String sql = "update TABLE1 ....; "
+"update TABLE2 ....; "
+"update TABLE3 ....; "
+"insert into TABLE4....; "
PreparedStatement pstmt = BD.conn.prepareStatement(sql);
pstmt.setString(1,x);
.....
pstmt.executeUpdate();
它有效,更新和插入成功,但我无法检查受影响的行。
答案 0 :(得分:1)
为了获得每个语句的受影响行,您应该a)一次执行一个语句b)使用批量更新。我使用后者是因为它效率更高(我也使用了Statement但你可能会使用PreparedStatement(你必须将它转换为Statement)
public int[] executeBatchUpdate(List<String> sqlStatements) throws EasyORMException{
int[] batchResults=null;
Statement stmt=null;
for (int i=0; i<sqlStatements.size();i++){
try{
if(stmt==null)
stmt = conn.createStatement();
stmt.addBatch(sqlStatements.get(i));
}catch(SQLException sqle){
//log or throw exception
}
}//end for loop
try {
batchResults = stmt.executeBatch();
}catch (SQLException sqle) {
//log or throw exception
}
}
return batchResults;
}
上面的方法返回一个int值数组(对于每个语句)。请注意,批量更新依赖于JDBC / DB驱动程序,因此,如果出现异常,您可能会看到不同数据库系统的不同行为(https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeBatch())。