当对数据库操作的数据量比较大的时候,批量处理可以大大得减少系统访问数据库的次数,提高了系统的效率
public boolean SecondUpdateChEn(Session session,
List<OriginDocManage> doclist) throws SQLException {
try {
//获得该Session使用的数据库连接,这里的session是传过来的
//通过JDBC API执行用于批量更新的SQL语句
PreparedStatement stmt=con.prepareStatement("update origin_doc_manage set Title_en=?,Abstract_en=? where Pub_no=?");
int i=1;
for(AbstractOriginDocManage doc:doclist){
System.out.println("****************************EN"+(i)+"***********************");
stmt.setString(1, doc.getTitleEn());
stmt.setString(2, doc.getAbstractEn());
String pubno = doc.getPubNo().substring(0, doc.getPubNo().length() - 1);
stmt.setString(3, pubno);
stmt.addBatch();
if(i%50==0||i==doclist.size()){
stmt.executeBatch();
stmt.clearBatch();
}
i++;
}
return true;
} catch (RuntimeException re) {
return false;
}
}
以下的都是按照我自己的理解,会有偏差,API的文档的解释对于我来说不如这样理解起来容易。所以大家避免被我误导,去参考相应的API文档详细了解
stmt.setString(1, doc.getTitleEn());给sql语句中相应的字段赋值,1,2,3...要对应SQL语句set后面的字段的顺序!!
.addBatch() 感觉和list的某系地方相似,将要处理的数据一条条得放到一个地方
.executeBatch()提交数据,把.addBatch()积攒起来的数据一起处理。这一批数据只需要访问一次数据库