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. Android Weekly Notes Issue #254

    Android Weekly Issue #254 April 23rd, 2017 Android Weekly Issue #254 本期内容包括: 如何用Kotlin写一个Gradle Plug ...

  2. Virtualbox mac版centos7.2 安装共享文件夹

    因为用的是mac本,在自己电脑上用virtualbox安装了centos7.2 虚拟机,为了实现与本机交换文件,需要用到贡享文件夹功能. 网上搜的时候多是windows版的,所以自己写一个mac版的. ...

  3. [工具技巧] SecureCRT使用技巧 V1.0

    本文档适用对象为需要使用secureCRT做系统或网络等调试的工程师,其必须有用过该款软件,基础功能会使用.对于那些需要修改大量设备的配置时像远程升级等等,更应该学习本文档. 1       Secu ...

  4. 机器学习笔记-1 Linear Regression with Multiple Variables(week 2)

    1. Multiple Features note:X0 is equal to 1 2. Feature Scaling Idea: make sure features are on a simi ...

  5. python中从文件中读取数据

    # average5.py def main(): fileName = input("What file are the numbers in?") infile = open( ...

  6. vue视频学习笔记

    video 7 vue问题: 论坛 http://bbs.zhinengshe.com------------------------------------------------UI组件 别人提供 ...

  7. hdu1198 Farm Irrigation 并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 简单并查集 分别合并竖直方向和水平方向即可 代码: #include<iostream&g ...

  8. 关于微信小程序的Request请求错误处理

    在学微信小程序的request请求的时候,一开始报“不在以下合法域名列表中,请参考文”的错误,后来又莫名其妙的报“400 Bad Request”错误,经过半天的研究,终于搞定了,把遇到的错误给大家分 ...

  9. web 直播&即时聊天------阿里云、融云

    随着直播越来越火,所在公司也打算制作自己的直播,所以去了解了这方面,使用后发现还是有些问题需要记录的. 经过分析,制作直播应该是分为两块来做,即直播与实时评论.这里先去制作实时评论,等直播ok后,也会 ...

  10. Spring入门导读——IoC和AOP

    和MyBatis系列不同的是,在正式开始Spring入门时,我们先来了解两个关于Spring核心的概念,IoC(Inverse of Control)控制反转和AOP()面向切面编程. 1.IoC(I ...