`
zjx2388
  • 浏览: 1312427 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC的批处理操作三种方式 pstmt.addBatch();

阅读更多
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的批量操作三种方式
*/

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

分享到:
评论

相关推荐

    完美的myeclipse连接mysql代码和最新驱动包JDBC

    pstmt.setObject(1, id); pstmt.setObject(2, name); pstmt.setObject(3, classname); pstmt.setObject(4, sex); pstmt.setObject(5, age); pstmt.execute(); }catch(Exception e){ ...

    mysql+java课程设计学生管理系统

    pstmt.setString(1, book.getBookName()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getSex()); pstmt.setFloat(4, book.getPrice()); pstmt.setInt(5, book.getBookTypeId()); pstmt....

    Java连接sql数据库增删改查.pdf

    pstmt.setString(4, country.getPopulation()); pstmt.setString(5, country.getGdp()); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { try { pstmt.close(); conn...

    踩踩踩JDBC六大步骤

    1、JDBC编程六大步: ...1.class.forName(driver) 2.new oracle.jdbc.driver.OracleDriver(); 3.java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver jdbc.drivers=System....pstmt.execute*(); 5)获得并处理结果集

    MVC模式的实现的增删改查

    ResultSet rs = pstmt.executeQuery(); Contact c = null; while(rs.next()){ // int id = rs.getInt("id"); String name=rs.getString("name"); String phone=rs.getString("phone"); ...

    如何用Java实现把excel表中的数据导入到mysql数据库已有的表中.docx

    pstmt.addBatch(); } pstmt.executeBatch(); pstmt.close(); ``` 5. **异常处理和关闭资源** 总是记得在操作完成后关闭数据库连接和文件输入流: ```java try { conn.close(); } catch (SQLException e...

    jdbc-odbc的基本操作

    pstmt.setString(1, tel.substring(0, 7)); rs = pstmt.executeQuery(); if (rs.next()) { result=new String(rs.getBytes("PCity"),"gbk");//访问数据库中文乱码问题 //result = rs.getString(1); } else { ...

    用java实现把excel数据导入到mysql数据库中.pdf

    pstmt.addBatch(); } pstmt.executeBatch(); conn.close(); } } ``` 4. Java 实现 Excel 数据导入到 MySQL 数据库的优点 使用 Java 语言实现 Excel 数据导入到 MySQL 数据库有很多优点,例如: * 高效率:...

    JDBC查插删改

    pstmt.setString(1, category.getName()); pstmt.executeUpdate(); } public void update(Category category) { String sql = "UPDATE CATEGORY SET NAME = ? WHERE ID = ?"; PreparedStatement pstmt = conn...

    jdbc连接数据库的方式2

    我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的...

    bbs系统可留言

    pstmt.setObject(i+1, param[i]); } num = pstmt.executeUpdate(); } catch (SQLException ex) { throw new Exception("错误提示:请检查SQL语法是否有误"); //throw ex ; } finally{ close(connect,pstmt...

    oracle.10g.程序包数组参数oracle-character-set-852

    oracle.sql.ArrayDescriptor desc =... pstmt.setArray(1, array); pstmt.executeUpdate(); 将10g版本配套的3个文件集中到一起, orai18n.jar classes12.jar nls_charset12.jar 防止下载的文件版本不一样,仍抛出异常

    第7章 数据库技术1

    3. 向数据库发送SQL的接口:`Statement`、`PreparedStatement`和`CallableStatement`是三种可以向数据库发送SQL的接口。`Statement`用于执行静态SQL语句,而`PreparedStatement`则允许预编译SQL语句,支持参数绑定,...

    jdbc基础和参考

    pstmt.setType(index,value); index从1开始 3.提供预编译的功能,某种程度上可以避免sql注入的问题 4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型...

    导入excel,office2007,2003,2010等各种版本

    POI 库提供了一个统一的 API,允许开发者以一种统一的方式来访问和操作 Office 文件。 现在,让我们回到正题,如何使用 POI 库来导入 Excel 文件。首先,我们需要引入 POI 库的相关 jar 文件,并在 Java 项目中添加...

    如何向MYSQL中写入二进制文件

    pstmt.setBinaryStream(1, photoStream, (int) file.length()); pstmt.executeUpdate(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main...

    JDBC访问数据库的步骤

    result=pstmt. executeUpdate(); result类型为整型,返回一个整数,小于零操作没成功 7.关闭不再使用的 如:rs.close(); stmt.close(); con.close(); JDBC编程步骤总结: 1. Load the Driver:Class.forName(); ...

    java程序控制excel导入导出数据库信息.pdf

    以下代码展示了这两种方式: ```java try { // 从本地文件创建 Workbook File sourcefile = new File("path_to_your_excel_file.xls"); Workbook rwb = Workbook.getWorkbook(sourcefile); // 或者从输入流...

    SQL注入与代码防御.pdf

    ResultSet rs = pstmt.executeQuery(); ``` 在上面的代码中,我们使用了参数化查询来防御 SQL 注入攻击。我们将用户名和密码作为参数传递给查询语句,从而防止攻击者构造恶意的 SQL 代码。 此外,开发者还可以使用 ...

    java对blob的存取.pdf

    pstmt.setBinaryStream(2, fis, fis.available()); pstmt.executeUpdate(); } catch (Exception ex) { System.out.println(ex.getMessage()); } } } ``` 在上面的代码中,我们使用了 JDBC 来连接 MySQL ...

Global site tag (gtag.js) - Google Analytics