package lavasoft.jdbctest;
import lavasoft.common.DBToolkit;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
/**
-
JDBC的批量操作三种方式
*/
public class BatchExeSQLTest {public static void main(String[] args) { exeBatchStaticSQL(); } /** * 批量执行预定义模式的SQL */ public static void exeBatchParparedSQL() { Connection conn = null; try { conn = DBToolkit.getConnection(); String sql = "insert into testdb.book (kind, name) values (?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "java"); pstmt.setString(2, "jjjj"); pstmt.addBatch(); //添加一次预定义参数 pstmt.setString(1, "ccc"); pstmt.setString(2, "dddd"); pstmt.addBatch(); //再添加一次预定义参数 //批量执行预定义SQL pstmt.executeBatch(); } catch (SQLException e) { e.printStackTrace(); } finally { DBToolkit.closeConnection(conn); } } /** * 批量执行混合模式的SQL、有预定义的,还有静态的 */ public static void exeBatchMixedSQL() { Connection conn = null; try { conn = DBToolkit.getConnection(); String sql = "insert into testdb.book (kind, name) values (?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "java"); pstmt.setString(2, "jjjj"); pstmt.addBatch(); //添加一次预定义参数 pstmt.setString(1, "ccc"); pstmt.setString(2, "dddd"); pstmt.addBatch(); //再添加一次预定义参数 //添加一次静态SQL pstmt.addBatch("update testdb.book set kind = 'JAVA' where kind='java'"); //批量执行预定义SQL pstmt.executeBatch(); } catch (SQLException e) { e.printStackTrace(); } finally { DBToolkit.closeConnection(conn); } } /** * 执行批量静态的SQL */ public static void exeBatchStaticSQL() { Connection conn = null; try { conn = DBToolkit.getConnection(); Statement stmt = conn.createStatement(); //连续添加多条静态SQL stmt.addBatch("insert into testdb.book (kind, name) values ('java', 'java in aciton')"); stmt.addBatch("insert into testdb.book (kind, name) values ('c', 'c in aciton')"); stmt.addBatch("delete from testdb.book where kind ='C#'"); stmt.addBatch("update testdb.book set kind = 'JAVA' where kind='java'");
// stmt.addBatch(“select count(*) from testdb.book”); //批量执行不支持Select语句
//执行批量执行
stmt.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBToolkit.closeConnection(conn);
}
}
}
注意:JDBC的批处理不能加入select语句,否则会抛异常:
java.sql.BatchUpdateException: Can not issue SELECT via executeUpdate().
at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007)