这是Mysql下的批处理程序:
package com.anthow.jdbc.batch;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
import com.anthow.util.JDBCUtil;
import com.mysql.jdbc.PreparedStatement;
public class BatchDemo {
private Connection conn=null;
private Statement stat=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
/**
* 用Statement
*/
@Test
public void test1(){
try {
conn=JDBCUtil.getConnection();
stat=conn.createStatement();
String sql1="insert into t3 values (1,'aaa1')";
String sql2="insert into t3 values (2,'aaa2')";
String sql3="delete from t3 where id=1";
stat.addBatch(sql1);
stat.addBatch(sql2);
stat.addBatch(sql3);
int [] ii=stat.executeBatch();
for(int i:ii)
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtil.release(rs, stat, conn);
}
}
/**
* 用PreparedStatement
*/
@Test
public void test2(){
long time=System.currentTimeMillis();
try {
conn=JDBCUtil.getConnection();
String sql="insert into t3 values (?,?)";
ps=(PreparedStatement) conn.prepareStatement(sql);
for(int i=0;i<100000;i++){
ps.setInt(1, i);
ps.setString(2, "aa"+i);
ps.addBatch();
if(i%1000==0){
ps.executeBatch();
ps.clearBatch();//一定要清除
}
}
ps.executeBatch();
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtil.release(rs, stat, conn);
}
System.out.println("时间: "+(System.currentTimeMillis()-time)/1000+"秒");
}
}
表的结构很简单,就是一个id和name 第二个处理的是100000条数据,下面是时间:
然后在数据库下每秒下插入的数据:
这是每秒插入的。 感觉速度好慢。。。。