天天看点

JDBC 批处理

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')");//静态的预编译

}