package day01;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class Batch {
/*
* 批处理的三种方式
*
* 预编译是用于执行DML语句(对数据批量的增删改)
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// exeBatchSql();
// exeBatchPrepareSql();
exeBatchmixedSql();
}
* 没有预编译的批处理(静态SQL)
public static void exeBatchStaticSql() throws Exception {
Connection connection = BaseSource.getConnection();
Statement statement = connection.createStatement();
for (int i = 0; i << font=""> 100; i++) {
//批量的添加数据,缓存起来
statement.addBatch("insert into emp values('a'," + i + ",'b','c')");
if (i % 50 == 0) {// 如果批处理的数据太多,可以控制批处理的数量,但要记得clearBatch()
statement.executeBatch();
statement.clearBatch();
}
}
statement.executeBatch();//缓存的SQL一次发给数据库
connection.close();
* 预编译的批处理
public static void exeBatchPrepareSql() throws Exception {
PreparedStatement prepareStatement = connection
.prepareStatement("insert into emp values(?,?,?,?)");
for (int i = 100; i << font=""> 200; i++) {
prepareStatement.setString(1, "a");
prepareStatement.setInt(2, i);
prepareStatement.setString(3, "b");
prepareStatement.setString(4, "c");
prepareStatement.addBatch();// 设置完一条完整的数据后addBatch()
for (int i = 200; i << font=""> 300; i++) {
prepareStatement.addBatch();
prepareStatement.executeBatch();
* 预编译和静态SQL 混合使用
public static void exeBatchmixedSql() throws Exception {
prepareStatement.setString(1, "a");
prepareStatement.setInt(2, 400);
prepareStatement.setString(3, "b");
prepareStatement.setString(4, "c");
prepareStatement.addBatch();//预编译的批处理
prepareStatement.addBatch("insert into emp values('a'," + 401 + ",'b','c')");//静态的预编译
}