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. 项目中如何使用babel6详解

    由于浏览器的版本和兼容性问题,很多es6,es7的新的方法都不能使用,等到可以使用的时候,可能已经过去了很多年.Babel可以把es6,es7的新代码编译成兼容绝大多数的主流浏览器的代码. 本篇文章主 ...

  2. 实时Android语音对讲系统架构

    本文属于Android局域网内的语音对讲项目系列,<通过UDP广播实现Android局域网Peer Discovering>实现了局域网内的广播及多播通信,本文将重点说明系统架构,音频信号 ...

  3. 基于vue2.0前端组件库element中 el-form表单 自定义验证填坑

    eleme写的基于vue2.0的前端组件库: http://element.eleme.io 我在平时使用过程中,遇到的问题. 自定义表单验证出坑: 1: validate/resetFields 未 ...

  4. 纯净CentOS7.2 yum源配置与使用yum 安装系统工具net-tools

    本节我们来讲CentOS 的yum 源配置 一.yum 简介 yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器 ...

  5. mysql数据库面试总结

    数据库优化 建表优化 1)数据库范式 l 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列. 如电话列可进行拆分---家庭电话.公司电话 l 第二范式(2NF):首先是 1NF,另外包 ...

  6. 使用Dotfuscator加密混淆程序以及如何脱壳反编译

    混淆演示 首先介绍如何使用Dotfuscator对.net程序加密码混淆/加壳 C#或vb.net编写的应用程序或DLL. 这里随便创建了一个C#的命令行控制台程序.程序很简单,对当前的时间进行了AE ...

  7. 微信小程序,前端大梦想(六)

    微信小程序,前端大梦想(六) 微信小程序之联合百度API实现定位 定位功能对于我们都不陌生,在移动端的应用中更是不可或缺的功能,小程序中也提供了对应的API帮助我们完成定位的实现,但是目前小程序的定位 ...

  8. React Native技术做的一个项目“微笑阅读”

    最近用React Native做了一个APP应用,有点心得: React Native确实比Hybrid应用渲染快,响应快,用户体验更好: React Native比原生简单多了,会Js就可以了,开发 ...

  9. Apache localhost和局域网ip地址访问

    今天忍无可忍重装了公司的电脑,所以把开发工具也都重新装一下. 安装wamp,localhost和局域网ip地址无法访问. 在C:\Windows\System32\drivers\etc\hosts文 ...

  10. Django入门笔记

    Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有 ...