JDBC的批处理操作三种方式

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;
/**
* JDBC的批量操作三种方式
*
* @author leizhimin 2009-12-4 14:42:11
*/
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

时间: 2024-11-16 09:44:00

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

PHP三种方式实现链式操作详解

在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是: strlen(trim($str)) 如果要实现类似js中的链式操作,比如像下面这样应该怎么写? $str->trim()->strlen() 下面分别用三种方式来实现: 方法一.使用魔法函数__call结合call_user_func来实现 思想:首先定义一个字符串类StringHelper,构造函数直接赋值value,然后链式调用trim()和strlen()函数,通过在调用的魔法函数__call()中

数据导入HBase最常用的三种方式及实践分析

要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要 针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase 中.常见方式为:使用HBase的API中的Put方法: 使用HBase 的bulk load 工具:使用定制的MapReduce Job方式.<HBase Administration Cookbook>一书对这三种方式有着详尽描述,由 ImportNew 的陈晨进行了编译,很有收获,推荐给大家. HBase数据迁移(1)-使用HBase的API

spring配置datasource三种方式

spring配置datasource三种方式 1.使用org.springframework.jdbc.datasource.DriverManagerDataSource 说明:DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSour

天上不会掉馅饼&amp;nbsp;创业快速获风投的三种方式

不要寄托于奔波在IT会场.遇及更多的VC就能融到资金:更不要想着VC众多,东方不亮西方亮,总有一两个会看懂你的商业模式. 你所要做的,恰恰是不必去考虑VC的胃口,他们喜欢什么或者今年什么模式会很热,专注于你正在做的项目,想清楚它想透它. 只有三种方式会帮助你的网络公司快速融到资金: 第一种:先围绕你的网站主题狂做流量,把网站迅速做到ALEXA排名2000位左右,最好能更高些.注意不要做假,自欺欺人的结果只会是无始而终.在拥有了有一定的.庞大的且稳定的用户基础上进行变阵,顺势变成你千思百想出的商业

javascript复制数组的三种方式

在前端开发中,复制数组是经常用到的功能.现在老K为大家总结一下javascript中复制数组的三种方式.   1.普通的for循环   这是一种使用最普遍的方式.利用js的for循环再生成一个相同的数组.代码如下:   var arr=[1,2,3]; var arr2=[]; for(var i=0; i<arr.length; i++){ arr2[i]=arr[i]; } console.log(arr, arr2);   输出: [1,2,3] [1,2,3]   为了验证arr2不是简

linux设置服务开机自启动的三种方式_Linux

这里介绍一下linux开机自动启动的几种方法,共计3种,大家可以借鉴一下!经验里面以centos 5.3系统为例! 方法1:.利用ntsysv命令进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图 在这个界面上进行操作即可,简要的操作说明: 括号中(*)代表默认开机启动,否则不会在开机的时候启动; 按钮功能: 上下键:可以在各个服务之间移动 空格键:设置启动还是不启动,*进行设置即可 Tab键:在方框.ok.cancle之间进行切换 F1键:进行帮助文档,如下图: 方法2:利用

ActiveMQ持久化消息的三种方式

本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle.下面逐一介绍. A:持久化为文件      这个你装ActiveMQ时默认就是这种,只要你设置消息为持久化就可以了.涉及到的配置和代码有        <persistenceAdapter>            <kahaDB directory="${activemq.base}/data/kahadb"/>        </persistenceAdapter> produc

天上不会掉馅饼 创业快速获风投的三种方式

不要寄托于奔波在IT会场.遇及更多的VC就能融到资金:更不要想着VC众多,东方不亮西方亮,总有一两个会看懂你的商业模式. 你所要做的,恰恰是不必去考虑VC的胃口,他们喜欢什么或者今年什么模式会很热,专注于你正在做的项目,想清楚它想透它. 只有三种方式会帮助你的网络公司快速融到资金: 第一种:先围绕你的网站主题狂做流量,把网站迅速做到ALEXA排名2000位左右,最好能更高些.注意不要做假,自欺欺人的结果只会是无始而终.在拥有了有一定的.庞大的且稳定的用户基础上进行变阵,顺势变成你千思百想出的商业

CIO通过大数据节省成本的三种方式

大数据在过去十年中最大的教训之一就是人们不知道到底有多少数据量.对于CIO来说,信息的收集,存储和交付给决策者的新方式正在影响其工作内容和范围. 而如今,从智能城市到制药研究的一切都将受到大数据发展的重大影响. 对于企业来说,数据的最重要的应用之一是没有得到足够的重视,它是降低成本和保护业务底线的作用.数据有助于帮助各种规模的企业更有效地运作. 以下是CIO们可以利用数据驱动平台削减成本的三种方式: (1)自动化费用管理 依靠员工管理费用是一种模拟过程,浪费时间,难以改进,因为无法捕获实时数据.