SQL批处理是JDBC性能优化的重要武器,批处理的用法有三种。

package lavasoft.jdbctest;

import lavasoft.common.DBToolkit;

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement;

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)

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/238651

JDBC的批处理操作三种方式的更多相关文章

  1. JDBC的批处理操作三种方式 pstmt.addBatch()

    package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...

  2. JDBC注册驱动的三种方式

    JDBC注册驱动的三种方式 1.通过导入的JDBC的驱动包拿到的com.mysql.jdbc.Driver对象,利用java.sql.DriverManager对象的DriverManager.reg ...

  3. JDBC注册驱动程序的三种方式

    1. Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动 Class.forName("com.mysql.jdbc.Dri ...

  4. JDBC注册驱动的三种方式(MySQL)

    第一种:通过反射Class.forName("com.mysql.jdbc.Driver"); 第二种:通过DriverManage的静态方法DriverManager.regis ...

  5. jdbc链接数据库的三种方式

    /** * jdbc连接数据库 * @author APPle * */ public class Demo1 { //连接数据库的URL private String url = "jdb ...

  6. IntelliJ IDEA 2017版 spring-boot 拦截器的操作三种方式

    一.注解方式 @WebServlet(urlPatterns = "/myServlet") public class MyServlet extends HttpServlet ...

  7. 四.使用JDBC进行批处理操作

    1 create table testbatch 2 ( 3 id int primary key, 4 name varchar(20) 5 ); 在实际的项目开发中,有时候需要向数据库发送一批SQ ...

  8. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  9. 注册Jdbc驱动程序的三种方式

    注册Jdbc驱动程序的三种方式 1. Class.forName("com.mysql.jdbc.Driver"); 2. DriverManager.registerDriver ...

随机推荐

  1. Windows系统操作指令汇总

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) 1. appwiz.cpl:程序和功能 2. calc:启动计算器 3. certmgr ...

  2. 导出Mysql数据库中的数据

    使用mysqldump 指令: D:\>mysqldump -u root -proot bookStore>bookStore.sql

  3. Struts2框架的基本使用

         前面已经介绍过了MVC思想,Struts2是一个优秀的MVC框架,大大降低了各个层之间的耦合度,具有很好的扩展性.从本篇开始我们学习Struts2的基本用法,本篇主要包括以下内容: Stru ...

  4. SSH框架搭建 详细图文教程

    转载请标明原文地址 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+Hibernate)的集成框架,是目前比较流行的一种Java Web开源框架. SSH主要用于Jav ...

  5. 进程间通信系列 之 命名管道FIFO及其应用实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  6. 原生js实现数据双向绑定

    最近接触了vue,在谈到vue等等的mvvm框架之前,先了解什么是数据双向绑定以及如何利用原生JS实现数据双向绑定 单向数据绑定 指先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HT ...

  7. Servlet实现简单的登录页面

    package emp; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; imp ...

  8. codeforces 782B The Meeting Place Cannot Be Changed (三分)

    The Meeting Place Cannot Be Changed Problem Description The main road in Bytecity is a straight line ...

  9. System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。

    EF使用ExecuteSqlCommand(db.Database.ExecuteSqlCommand("exec proc_DeleteCaseInfo_Output @caseID&qu ...

  10. Docker - 手动迁移镜像

    在没有Docker Registry时,可以通过docker save和docker load命令完成镜像迁移的过程,先将镜像保存为压缩包,然后在其他位置再加载压缩包. 将镜像保存为压缩包文件 [ro ...