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. 【代码学习】MYSQL数据库的常见操作

    ---恢复内容开始--- ============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与 ...

  2. httpd: Could not reliably determine the server's fully qualified domain name

    作者:Younger Liu, 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. 问题描述: AH00558: httpd: Could not reliab ...

  3. 亲测可用!!!golang如何在idea中保存时自动进行代码格式化

    亲测可用,golang在idea中的代码自动格式化 1.ctrl+alt+s打开设置界面,选择[Plugins] -> [Install JetBrains plugin...] -> 搜 ...

  4. RocketMQ与Kafka对比

    转自:https://github.com/alibaba/RocketMQ/wiki/rmq_vs_kafka 淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用MySQL作为消息存 ...

  5. 浅析如何在Nancy中使用Swagger生成API文档

    前言 上一篇博客介绍了使用Nancy框架内部的方法来创建了一个简单到不能再简单的Document.但是还有许许多多的不足. 为了能稍微完善一下这个Document,这篇引用了当前流行的Swagger, ...

  6. Android学习资料整理

    1.官方网站 http://developer.android.com/index.html http://android-developers.blogspot.com/ 2.Android Des ...

  7. windows下安装mongodb以及node.js连接mongodb

    一.MongoDB 下载 下载地址  https://www.mongodb.com/download-center#community  选择windows版下载,然后安装. 二.安装完毕后创建数据 ...

  8. LeetCode:60. Permutation Sequence,n全排列的第k个子列

    LeetCode:60. Permutation Sequence,n全排列的第k个子列 : 题目: LeetCode:60. Permutation Sequence 描述: The set [1, ...

  9. Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞

    Java中线程的使用 (2)-多线程.线程优先级.线程睡眠.让步.阻塞 (一)多线程使用方法 说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法) class Xc3 ext ...

  10. SpringData系列一 Spring Data的环境搭建

    本节作为主要讲解Spring Data的环境搭建 JPA Spring Data :致力于减少数据访问层(DAO)的开发量.开发者唯一要做的就是声明持久层的接口,其他都交给Spring Data JP ...