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)
 


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/238651,如需转载请自行联系原作者
相关文章
|
SQL Java 数据库连接
java使用jdbc操作数据库
java使用jdbc操作数据库
214 2
|
Java 数据库 数据安全/隐私保护
基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
204 0
|
SQL Java 数据库连接
Hive教程(08)- JDBC操作Hive
Hive教程(08)- JDBC操作Hive
1865 0
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之在使用JDBC连接MySQL数据库时遇到报错,识别不到jdbc了,怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
Java 数据库连接 数据库
实时计算 Flink版操作报错合集之flink jdbc写入数据时,长时间没写入后报错,是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
924 9
|
SQL Java 数据库连接
Java JDBC连接与操作深度解析
Java JDBC连接与操作深度解析
222 1
|
SQL Java 数据库连接
使用Python通过JDBC操作数据库(达梦数据库)
使用Python通过JDBC操作数据库(达梦数据库)
2502 0
|
Java 数据库连接 数据库
JDBC之Statement与PreparedStatement操作数据库对比
JDBC之Statement与PreparedStatement操作数据库对比
154 0
|
SQL Java 关系型数据库
JavaWeb(JDBC编程)看这一篇就够了 —— 如何使用Java操作mysql数据库
JavaWeb(JDBC编程)看这一篇就够了 —— 如何使用Java操作mysql数据库
658 0
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。
585 0