• JDBC的批处理操作三种方式


    SQL批处理是JDBC性能优化的重要武器,经本人研究总结,批处理的用法有三种。

     1 package lavasoft.jdbctest;
     2 
     3 import lavasoft.common.DBToolkit;
     4 
     5 import java.sql.Connection;
     6 import java.sql.PreparedStatement;
     7 import java.sql.SQLException;
     8 import java.sql.Statement;
     9 
    10 /**
    11 * JDBC的批量操作三种方式
    12 *
    13 * @author leizhimin 2009-12-4 14:42:11
    14 */
    15 public class BatchExeSQLTest {
    16 
    17         public static void main(String[] args) {
    18                 exeBatchStaticSQL();
    19         }
    20 
    21         /**
    22          * 批量执行预定义模式的SQL
    23          */
    24         public static void exeBatchParparedSQL() {
    25                 Connection conn = null;
    26                 try {
    27                         conn = DBToolkit.getConnection();
    28                         String sql = "insert into testdb.book (kind, name) values (?,?)";
    29                         PreparedStatement pstmt = conn.prepareStatement(sql);
    30                         pstmt.setString(1, "java");
    31                         pstmt.setString(2, "jjjj");
    32                         pstmt.addBatch();                     //添加一次预定义参数
    33                         pstmt.setString(1, "ccc");
    34                         pstmt.setString(2, "dddd");
    35                         pstmt.addBatch();                     //再添加一次预定义参数
    36                         //批量执行预定义SQL
    37                         pstmt.executeBatch();
    38                 } catch (SQLException e) {
    39                         e.printStackTrace();
    40                 } finally {
    41                         DBToolkit.closeConnection(conn);
    42                 }
    43         }
    44 
    45         /**
    46          * 批量执行混合模式的SQL、有预定义的,还有静态的
    47          */
    48         public static void exeBatchMixedSQL() {
    49                 Connection conn = null;
    50                 try {
    51                         conn = DBToolkit.getConnection();
    52                         String sql = "insert into testdb.book (kind, name) values (?,?)";
    53                         PreparedStatement pstmt = conn.prepareStatement(sql);
    54                         pstmt.setString(1, "java");
    55                         pstmt.setString(2, "jjjj");
    56                         pstmt.addBatch();    //添加一次预定义参数
    57                         pstmt.setString(1, "ccc");
    58                         pstmt.setString(2, "dddd");
    59                         pstmt.addBatch();    //再添加一次预定义参数
    60                         //添加一次静态SQL
    61                         pstmt.addBatch("update testdb.book set kind = 'JAVA' where kind='java'");
    62                         //批量执行预定义SQL
    63                         pstmt.executeBatch();
    64                 } catch (SQLException e) {
    65                         e.printStackTrace();
    66                 } finally {
    67                         DBToolkit.closeConnection(conn);
    68                 }
    69         }
    70 
    71         /**
    72          * 执行批量静态的SQL
    73          */
    74         public static void exeBatchStaticSQL() {
    75                 Connection conn = null;
    76                 try {
    77                         conn = DBToolkit.getConnection();
    78                         Statement stmt = conn.createStatement();
    79                         //连续添加多条静态SQL
    80                         stmt.addBatch("insert into testdb.book (kind, name) values ('java', 'java in aciton')");
    81                         stmt.addBatch("insert into testdb.book (kind, name) values ('c', 'c in aciton')");
    82                         stmt.addBatch("delete from testdb.book where kind ='C#'");
    83                         stmt.addBatch("update testdb.book set kind = 'JAVA' where kind='java'");
    84 //                        stmt.addBatch("select count(*) from testdb.book");                //批量执行不支持Select语句
    85                         //执行批量执行
    86                         stmt.executeBatch();
    87                 } catch (SQLException e) {
    88                         e.printStackTrace();
    89                 } finally {
    90                         DBToolkit.closeConnection(conn);
    91                 }
    92         }
    93 }

    注意:JDBC的批处理不能加入select语句,否则会抛异常:

    1 ava.sql.BatchUpdateException: Can not issue SELECT via executeUpdate().
    2   at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007)

    本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/238651

  • 相关阅读:
    【Q&A】pytorch中的worker如何工作的
    【教程】opencv-python+yolov3实现目标检测
    ubuntu使用scrcpy手机投屏-免费神器scrcpy【介绍、安装、使用】
    【从踩坑到教程】win10下ubuntu18.04双系统UEFI模式安装、Nvidia驱动安装
    Python引用与目录结构
    交流总结
    转载-趣图展现程序员职业生涯的11个阶段
    转载-在家工作,10招助你效率、生活两不误
    转载-新年寄望:从小做起,活在当下
    转载-成为明星程序员的10个提示
  • 原文地址:https://www.cnblogs.com/zhangyongjian/p/3656333.html
Copyright © 2020-2023  润新知