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

使用JDBC进行批处理

    博客分类:
  • java
阅读更多

l业务场景:当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率。
l实现批处理有两种方式,第一种方式:
Statement.addBatch(sql)
l执行批处理SQL语句
executeBatch()方法:执行批处理命令
clearBatch()方法:清除批处理命令

 

 

 

Connection conn = null;

Statement st = null;

ResultSetrs = null;

try {

conn = JdbcUtil.getConnection();

String sql1 = "insert into user(name,password,email,birthday)

  values('kkk','123','abc@sina.com','1978-08-08')";

String sql2 = "update user set password='123456' where id=3";

st = conn.createStatement();

st.addBatch(sql1);  //SQL语句加入到批命令中

st.addBatch(sql2);  //SQL语句加入到批命令中

st.executeBatch();

} finally{

  JdbcUtil.free(conn, st, rs);

}

 

 

l采用Statement.addBatch(sql)方式实现批处理:
优点:可以向数据库发送多条不同的SQL语句。
缺点:
SQL语句没有预编译。
当向数据库发送多条语句相同,但仅参数不同的SQL语句时,需重复写上很多条SQL语句。例如:

  Insert into user(name,password) values(‘aa’,’111’);

  Insert into user(name,password) values(‘bb’,’222’);

  Insert into user(name,password) values(‘cc’,’333’);

  Insert into user(name,password) values(‘dd’,’444’);

 

 

l实现批处理的第二种方式:
PreparedStatement.addBatch()

conn = JdbcUtil.getConnection();

String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";

st = conn.prepareStatement(sql);

for(inti=0;i<50000;i++){

st.setString(1, "aaa" + i);

st.setString(2, "123" + i);

st.setString(3, "aaa" + i + "@sina.com");

st.setDate(4,new java.sql.Date(new java.util.Date().getTime()));

 

st.addBatch();

if(i%1000==0){

st.executeBatch();

st.clearBatch();

}

}

st.executeBatch();

l采用PreparedStatement.addBatch()实现批处理
优点:发送的是预编译后的SQL语句,执行效率高。
缺点:只能应用在SQL语句相同,但参数不同的批处理中。因此此种形式的批处理经常用于在同一个表中批量插入数据,或批量更新表的数据。
 
 混合模式
/** 
         * 批量执行混合模式的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); 
                } 
        } 

  
executeBatch()会返回int数组,表示影响的行数,
在用oracle时,他总返回-2,驱动不支持。
有这么一个方法,可以试下,但他不通用啊,
6、在成批处理重复的插入或更新操作中使用PreparedStatement对象

   如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch():

PreparedStatement pstmt3D null;
try {
  ((OraclePreparedStatement)pstmt).setExecuteBatch(30);
  ...
  pstmt.executeUpdate();

   调用setExecuteBatch()时指定的值是一个上限,当达到该值时,就会自动地引发SQL命令执行,标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。
 
分享到:
评论

相关推荐

    JDBC的批处理操作三种方式

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

    使用JDBC的批处理功能

    本文将详细阐述JDBC批处理的基本概念、优势以及如何在实际应用中使用。 一、批处理的概念 批处理是指一次性提交多个SQL语句到数据库进行执行,而不是逐个发送和执行。在JDBC中,批处理主要通过Statement或...

    JDBC进行批处理共4页.pdf.zip

    **JDBC批处理详解** 在Java数据库连接(Java Database Connectivity, JDBC)中,批处理是一项重要的功能,它允许开发者一次性提交多个SQL语句,从而提高数据处理的效率和性能。批处理是数据库操作中的优化手段,...

    jdbc 批处理.rar

    在给定的博客链接中,可能详细解释了这些概念,并提供了示例代码来演示如何在实际应用中实现JDBC批处理。通过学习这个资源,开发者可以更好地理解和应用批处理技术,提升Java数据库应用程序的效率。

    JDBC高级批处理

    JDBC批处理的实现依赖于数据库驱动的实现,不同数据库的驱动可能会有不同的优化策略。深入研究JDBC源码,可以帮助我们理解批处理在底层是如何工作的,以及如何针对特定数据库优化性能。 ### 8. 工具支持 很多...

    JDBC数据库操作值MySQL批处理操作

    在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一组接口和类。MySQL批处理是JDBC提供的一种优化数据库操作的方法,它允许开发者一次提交多个SQL语句,从而提高数据处理效率。本文将...

    JDBC批处理数据

    通过上述示例可以看出,使用JDBC批处理能够显著提高数据处理的速度和效率,特别是在处理大量数据时。为了进一步优化性能,还可以考虑以下几点: - **批量提交大小:** 调整批处理中SQL语句的数量,找到最佳的批量...

    用pinyin4j 获取拼音简码 + JXL 读写Excl文件 + JDBC 批处理

    例如,如果你需要更新大量用户的数据,可以使用JDBC批处理来批量更新,减少网络通信和数据库事务处理的开销。 结合这三个技术,我们可以实现一个功能强大的系统。例如,一个基于Web的应用可能需要从用户上传的Excel...

    JDBC笔记 方立勋

    方立勋老师的JDBC笔记还会深入到JDBC的高级特性,如JDBC批处理、连接池的使用、JNDI数据源、以及JDBC的最新版本特性等,这些都是Java开发者必须掌握的技能。通过这些笔记的学习,读者将能够熟练地使用JDBC进行数据库...

    jdbc 增删改查事物处理, 批处理,以及预编译示例代码

    在Java数据库连接(JDBC)中,增删改查(CRUD)操作是与数据库交互的基础,事务处理、批处理和预编译SQL语句则是提高效率和保证数据一致性的关键技术。以下是对这些概念的详细说明: 1. **JDBC增删改查(CRUD)**:...

    关于hibernate的批处理

    10. **JDBC批处理API**: Hibernate底层使用JDBC的批处理API(Statement.addBatch()和Statement.executeBatch()),用户也可以直接使用JDBC批处理,绕过Hibernate的部分逻辑,获取更高的性能。 11. **性能优化注意...

    J2ee学习轨迹.txt

    - **批处理**:学习如何使用JDBC进行批处理操作,提高数据库操作效率。 - **结果集处理**:掌握如何处理查询结果集,获取数据。 - **不同数据库的支持**:了解JDBC对不同数据库的支持情况。 - **ORM框架**:熟悉...

    j2EE 经典面试题

    - **批处理操作**:了解如何使用JDBC进行批处理,提高数据插入性能。 5. **EJB(Enterprise JavaBeans)** - **EJB类型**: Stateless Session Beans、Stateful Session Beans、Message-driven Beans的概念和应用...

    使用JDBC进行增删改查共12页.pdf.zip

    本资料“使用JDBC进行增删改查共12页.pdf.zip”似乎是一份详细的教程,涵盖了JDBC的基本用法和实践案例,适用于初学者或需要巩固JDBC知识的开发者。 首先,JDBC工作原理是通过加载数据库驱动,建立与数据库的连接。...

    使用jdbc动态连接数据库

    ### 使用JDBC动态连接数据库 #### 一、JDBC简介 JDBC,即Java DataBase Connectivity标准,是一个由Sun Microsystems设计的API(应用程序编程接口),它允许Java程序与各种关系型数据库进行交互。作为Java核心类库...

    jdbc jdbc jdbc

    6. **批处理(Batch Processing)**:对于需要执行大量相似SQL语句的情况,JDBC提供批处理功能,允许一次发送多个SQL语句,从而提高效率。 7. **JDBC URL**:每个数据库驱动都有一个特定的JDBC URL格式,用于标识要...

    MySQL jdbc连接器 jdbc.zip

    此外,对于大规模应用,还可以考虑使用JDBC的批处理功能来提高批量插入或更新的效率。 总之,MySQL JDBC连接器是Java开发者不可或缺的工具,它使得我们可以方便地在Java应用中集成MySQL数据库,实现各种复杂的...

    greenplum_jdbc_5.1.4.zip

    - 使用JDBC的批处理功能提高批量操作的效率。 6. **常见问题及解决方案** - 连接超时:检查网络状况,或者调整数据库的连接超时设置。 - SQL语法错误:遵循Greenplum的SQL语法规范,避免使用不支持的特性。 - ...

    SQLserver2005最新JDBC驱动

    8. **性能优化**:使用JDBC的批处理、预编译语句和连接池等技术可以显著提升数据库操作的性能。 9. **异常处理**:在JDBC编程中,需要捕获SQLException及其子类异常,进行适当的错误处理。 10. **连接池**:在实际...

    jdbc使用参考手册

    总之,JDBC是Java开发者与各种数据库进行交互的关键工具,理解并熟练掌握JDBC的各项功能,能够提升开发效率,确保数据操作的高效性和安全性。这份英文版的JDBC使用参考手册将为你的数据库编程之路提供详尽的指导。

Global site tag (gtag.js) - Google Analytics