JDBC使用MySQL处理大数据的时候,自然而然的想到要使用批处理,
普通的执行过程是:每处理一条数据,就访问一次数据库;
而批处理是:累积到一定数量,再一次性提交到数据库,减少了与数据库的交互次数,所以效率会大大提高
至于事务:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功,默认是关闭事务的。
既用事务,也用批处理,速度最快;
package com.jdbcTemplate1; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; public class JdbcTemplateForBatchUpdate { //需要填充的数据量 public static int count=1000; /** * @param args */ public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); DataSource dt=(DataSource) context.getBean("dataSource"); //使用数据源转 JdbcTemplate template=new JdbcTemplate(dt) ; //定义批量数据的列表 final List stcdlist=new ArrayList(); final List namelist=new ArrayList(); //填充数据到列表 ; for (int i = 0; i < count; i++) { stcdlist.add("beijing_"+i); namelist.add("北京_"+i); } String sql="insert into pptn values(?,?)"; //通过内部类创建批处理对象 BatchPreparedStatementSetter bts=new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int index) throws SQLException { ps.setString(1, (String) stcdlist.get(index)); ps.setString(2, (String) namelist.get(index)); } @Override public int getBatchSize() { // TODO Auto-generated method stub return count; } }; //执行批插入数据 template.batchUpdate(sql, bts); System.out.println("批量插入数据完成!"); }