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. c# 基础算法(一) 九九乘法

    闲来无事,偶见某贴子里面讨论面试题.突然对一题产生了兴趣,做一道99乘法打印(主要是我工作了2家单位,还没有一家单位在面试时给我出这一道题)于是试着自己写写看.大概逻辑如下 class program ...

  2. Java设计模式———静态工厂

    上课时yqj2065要求:除了JDK等框架或工具中的类,自己编写的类不得使用new创建对象(Test除外). 据说是因为使用new会涉及到硬编码.(不是很懂) 所以要求用God类利用反射+配置文件来创 ...

  3. office web apps 整合Java web项目

    之前两篇文章将服务器安装好了,项目主要的就是这么讲其整合到我们的项目中,网上大部分都是asp.net的,很少有介绍Java如何整合的,经过百度,终于将其整合到了我的项目中. 首先建个servlet拦截 ...

  4. windows下使用IIS的ARR实现站点的负载均衡

    1)    目的: 访问localhost:18066 对下边两个端口负载 localhost:18098 localhost:18099 2)    手段: 1.通过nginx 2.通过iis的AR ...

  5. 基础并查集poj2236

    An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...

  6. Struts2之Action接收请求参数和拦截器

    技术分析之在Struts2框架中使用Servlet的API        1. 在Action类中也可以获取到Servlet一些常用的API        * 需求:提供JSP的表单页面的数据,在Ac ...

  7. react native 升级到0.31.0的相关问题 mac xcode开发环境

    cmd + D和cmd + R快捷键没有反应 0.31.0版本换了一种加载方式,通过修改userDefaults达到debug目的 [userDefaults setObject:@"127 ...

  8. POJ1019-Number Sequence数学

    题目链接:http://poj.org/problem?id=1019 题目大意: 题目的意思很清楚了,就是把数字的每一位都当成是单个的字母来对待,然后求第i位的数是哪一个.(1<=i<= ...

  9. [笔记]我的Linux入门之路 - 01.Ubuntu安装

    最近学机器学习,感觉matlab/octave用的人不多,想改用python.于是开始学python,辛辛苦苦学会了自己装环境和装第三方库,结果发现scipy库竟然没有win版本!于是想着那我得装个l ...

  10. winXP/win7/win10系统关闭445端口方法全攻略

    近日有多个高校发布了关于连接校园网的电脑大面积中勒索病毒的消息,这种病毒致使许多高校毕业生的毕业论文(设计)被锁.受害机器的磁盘文件会被篡改为相应的后缀,图片.文档.视频.压缩包等各类资料都无法正常打 ...