进行JDBC的操作的时候,都是一条SQL语句执行。当sql语句有上万条甚至更多时,就需要进行批处理。现在如果使用批处理,可以将一批SQL语句一起执行。
需要在properties文件中的url后面加上批处理参数: ?rewriteBatchedStatements=true。
主要用到的方法:
pstmt = conn.prepareStatement(sql);
pstmt.setString(int parameterIndex, String x
);//将指定参数设置为给定 Java String
值。pstmt.addBatch();//加入需要进行的sql语句
pstmt.executeBatch();//执行
pstmt.clearBatch();//清空
package demo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import org.junit.Test;
public class 批处理 {
@Test
/*
* 批量插入记录:
* 默认情况下mysql批处理是没有开启的,需要在url后拼接一个参数即可
* 这个就是批处理的参数:rewriteBatchedStatements=true
*/
public void test() {
long start = System.currentTimeMillis();
Connection conn = null;
PreparedStatement pstmt = null;
try {
//获得连接
conn = JDBCUtils.getConnection();
//编写sql语句:
String sql = "use xscj";
String sql1 = "create table user(id int primary key auto_increment,name varchar(20))";
pstmt = conn.prepareStatement(sql);
pstmt.addBatch(sql1);
pstmt.executeBatch();
pstmt.clearBatch();
String sql2 = "insert user value (null,?)";
//这里要重新给pstmt创一个对象
//因为上面有语句了,所以不能直接写成pstmt.addBatch(sql2);
pstmt = conn.prepareStatement(sql2);
for(int i = 1;i<= 1000;i++) {
pstmt.setString(1, "name"+i);
pstmt.addBatch();
//注意问题:
//执行批量处理
if(i%1000==0) {
//执行批处理 每一千条执行一次并清空
pstmt.executeBatch();
pstmt.clearBatch();
}
}
}catch(Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.release(pstmt, conn);
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}