- 浏览: 38832 次
- 性别:
- 来自: 北京
最新评论
-
lixiamani:
一条数据的数据量大小不同,你的数据量比较大
JDBC addbatch批量处理数据时有最大值限制 -
cmland:
我的测试结果和你相差好远,使用batch最多能支持511条记录 ...
JDBC addbatch批量处理数据时有最大值限制 -
hslh22:
请提供一下完整的源代码,谢谢
JDBC addbatch批量处理数据时有最大值限制
在用jdbc向数据灌入数据时,发现120000的数据每次只能灌入50000多条,其他的就没有了。
在oracle 9i(windows 2003),oracle 10g(RHEL 4)上试验证有相同的结果。
使用定量灌入的办法,每5W条定义为一个事务,进行提交,将120000数据循环灌入,成功。
对于批量的update,delete操作两样有5W条左右的记录数限制。
结论:jdbc批量数据处理的每个批次是有数量的限制的。
我在本地环境中测试的限制量为每批54464条,其他配置的机器没有试过。
以下是插入数据时的代码:
以下是删除数据时的代码:
以下是更新数据的代码:
在oracle 9i(windows 2003),oracle 10g(RHEL 4)上试验证有相同的结果。
使用定量灌入的办法,每5W条定义为一个事务,进行提交,将120000数据循环灌入,成功。
对于批量的update,delete操作两样有5W条左右的记录数限制。
结论:jdbc批量数据处理的每个批次是有数量的限制的。
我在本地环境中测试的限制量为每批54464条,其他配置的机器没有试过。
以下是插入数据时的代码:
ConnDB cd = new ConnDB(); Connection ct = null; PreparedStatement pst = null; ResultSet rs = null; ct = cd.getConn(); String insertSql = "insert into mytable (name,age) values(?,?)"; System.out.println(insertSql); try { ct.setAutoCommit(false); // 开始事务 pst = ct.prepareStatement(insertSql); for (int i = 0; i < 120000; i++) { pst.setString(1, "name" + i); pst.setInt(2, i); pst.addBatch(); System.out.println(i); //分段提交 if((i%50000==0&& i!=0)||i== (120000 -1)){ pst.executeBatch(); ct.commit(); ct.setAutoCommit(false);// 开始事务 pst = ct.prepareStatement(insertSql); System.out.println("------------>50000"); } } ct.commit();// 提交事务 } catch (SQLException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } catch (RuntimeException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { cd.close(ct, pst, rs); } } ConnDB cd = new ConnDB(); Connection ct = null; PreparedStatement pst = null; ResultSet rs = null; ct = cd.getConn(); String insertSql = "insert into mytable (name,age) values(?,?)"; System.out.println(insertSql); try { ct.setAutoCommit(false); // 开始事务 pst = ct.prepareStatement(insertSql); for (int i = 0; i < 120000; i++) { pst.setString(1, "name" + i); pst.setInt(2, i); pst.addBatch(); System.out.println(i); //分段提交 if((i%50000==0&& i!=0)||i== (120000 -1)){ pst.executeBatch(); ct.commit(); ct.setAutoCommit(false);// 开始事务 pst = ct.prepareStatement(insertSql); System.out.println("------------>50000"); } } ct.commit();// 提交事务 } catch (SQLException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } catch (RuntimeException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { cd.close(ct, pst, rs); } }
以下是删除数据时的代码:
ConnDB cd = new ConnDB(); Connection ct = null; PreparedStatement pst = null; ResultSet rs = null; ct = cd.getConn(); String deleteSql = "delete from mytable t where t.name=?"; System.out.println(deleteSql); int[] intArray = new int[120000]; try { ct.setAutoCommit(false); // 开始事务 pst = ct.prepareStatement(deleteSql); for (int i = 0; i < 120000; i++) { pst.setString(1, "name" + i); pst.addBatch(); System.out.println(i); // 分段提交 if ((i % 50000 == 0 && i != 0) || i == (120000 - 1)) { intArray = pst.executeBatch(); ct.commit(); ct.setAutoCommit(false);// 开始事务 pst = ct.prepareStatement(deleteSql); System.out.println("------------>50000"); } } ct.commit();// 提交事务 } catch (SQLException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } catch (RuntimeException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { cd.close(ct, pst, rs); } ConnDB cd = new ConnDB(); Connection ct = null; PreparedStatement pst = null; ResultSet rs = null; ct = cd.getConn(); String deleteSql = "delete from mytable t where t.name=?"; System.out.println(deleteSql); int[] intArray = new int[120000]; try { ct.setAutoCommit(false); // 开始事务 pst = ct.prepareStatement(deleteSql); for (int i = 0; i < 120000; i++) { pst.setString(1, "name" + i); pst.addBatch(); System.out.println(i); // 分段提交 if ((i % 50000 == 0 && i != 0) || i == (120000 - 1)) { intArray = pst.executeBatch(); ct.commit(); ct.setAutoCommit(false);// 开始事务 pst = ct.prepareStatement(deleteSql); System.out.println("------------>50000"); } } ct.commit();// 提交事务 } catch (SQLException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } catch (RuntimeException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { cd.close(ct, pst, rs); } }
以下是更新数据的代码:
ConnDB cd = new ConnDB(); Connection ct = null; PreparedStatement pst = null; ResultSet rs = null; ct = cd.getConn(); String deleteSql = "update mytable t set t.age =20 where t.name=?"; System.out.println(deleteSql); int[] intArray = new int[120000]; try { ct.setAutoCommit(false); // 开始事务 pst = ct.prepareStatement(deleteSql); for (int i = 0; i < 120000; i++) { pst.setString(1, "name"+i); pst.addBatch(); System.out.println(i); // 分段提交 if ((i % 50000 == 0 && i != 0) || i == (120000 - 1)) { intArray = pst.executeBatch(); ct.commit(); ct.setAutoCommit(false);// 开始事务 pst = ct.prepareStatement(deleteSql); System.out.println("------------>50000"); } } ct.commit();// 提交事务 } catch (SQLException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } catch (RuntimeException e) { try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { cd.close(ct, pst, rs); } }
评论
3 楼
lixiamani
2011-11-21
一条数据的数据量大小不同,你的数据量比较大
2 楼
cmland
2011-10-27
我的测试结果和你相差好远,使用batch最多能支持511条记录进行批量操作。
测试环境:jdk1.6,win7,oracle10g。
如果batch数量多于511条就会报错:
java.lang.ArrayIndexOutOfBoundsException: -32433。
测试环境:jdk1.6,win7,oracle10g。
如果batch数量多于511条就会报错:
java.lang.ArrayIndexOutOfBoundsException: -32433。
1 楼
hslh22
2011-09-01
请提供一下完整的源代码,谢谢
发表评论
-
Java程序性能优化
2012-11-19 10:27 643StringTokenizer 比String.split() ... -
css相对,绝对定位
2012-08-06 20:22 636相对定位是相对于不设置相对时的位置偏移,原有位置仍被占据 绝 ... -
安卓学习笔记
2012-08-05 15:02 603sqlite数据库不需要关闭,因为只有一个用户 sqlite ... -
收集国内国外比较经典的手机网站(转)
2012-05-22 17:36 1593把平常见到的一些好的手机网站收集在这,以后做的时候就去扒代码就 ... -
wap页面防左右滑动
2012-05-11 10:30 1113<meta name="viewport&qu ... -
设计模式
2012-02-14 16:02 718单例模式双加锁 if (instance == null) ... -
编写高质量的代码:Web前端开发
2012-01-15 16:40 844Web 标准——结构、样式和行为的分离 判断语义良好:fire ... -
java程序员上班那点事
2011-11-05 23:42 617JDBC操作的核心是Socket网络操作 Navicat M ... -
#parameters
2011-09-30 16:06 1173#相当于ActionContext.getContext() ... -
安装myeclipse不能放在中文目录下
2011-09-08 20:02 806Java.lang.RuntimeException: No ... -
日期增加天数
2011-08-12 18:25 650日期增加天数 String str="2011-08 ... -
核心技术
2011-06-15 17:40 684使用Spring作为核心框架并集成其他组件或框架 使用Hib ... -
ensureCapacity()方法提高ArrayList的初始化速度
2011-05-19 13:23 1278import java.util.ArrayList; ... -
利用servlet生成简单的验证码
2010-03-21 15:56 599在web.xml配置: <servlet> ... -
javascript option
2010-03-21 15:46 943一基础理解: var e = document.getEl ... -
javascript刷新
2010-03-14 17:07 708项目中会用到很多关于框架页面刷新的方法。先来看一个简单的例子: ... -
java2word读取word表格
2010-01-27 19:52 1346import java.util.ArrayList; im ... -
jacob读取word表格
2010-01-27 19:10 3369import com.jacob.activeX.Active ... -
ECLIPSE常用快捷键
2010-01-24 17:49 732更改为大写 Ctrl+Shift+X 更改为小写 Ctrl+S ... -
ajax验证用户名
2010-01-18 10:05 628var xmlHttp; function cre ...
相关推荐
JDBC 批量处理语句是指使用 JDBC 连接数据库时,批量执行 SQL 语句的方法。这种方法可以大大提高更新处理速度,减少数据库访问次数,提高应用程序的性能。 在 JDBC 中,批量处理语句包括两个方法:addBatch(String)...
通过合理利用JDBC的批量处理功能,开发者可以优化数据操作的性能,特别是在处理大数据量时,能有效减少数据库的负担,提高系统的整体响应速度。因此,理解和掌握批量处理是每个Java数据库开发者必备的技能之一。
本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...
批量操作是指在一次数据库连接中执行多次SQL语句的操作,这种方式能显著提高程序性能,尤其是在处理大量数据时。 **批量插入**主要用于数据导入和日志记录等场景。例如,在日志系统中,通常会将日志信息先写入到...
JDBC的批量处理机制是提高数据库操作效率的重要手段,尤其是在处理大量数据时。普通插入、批处理和存储过程的批量执行各有特点和适用场景。普通插入适用于小规模数据操作,而批处理和存储过程则更适合于大规模数据...
在Java编程领域,数据批量处理是一项常见的任务,尤其在大数据、数据库操作以及系统集成等场景中,批量处理能显著提高效率并减少资源消耗。本文将深入探讨Java如何进行数据批量处理,涉及的主要知识点包括批量读取、...
在数据库操作中,批量插入(Batch Insert)是一种提高性能的有效方式,尤其是在处理大量数据时。本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database ...
在处理大量Blob数据时,传统的单条插入方式可能会导致性能低下,因为每条SQL语句都需要与数据库进行交互,这会增加网络传输和数据库处理的开销。因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC...
本文中提供了一个完整的示例代码,演示了Java实现批量向mysql写入数据的方法,包括JDBC连接mysql数据库、批量向mysql写入数据和基本的异常处理等操作。该示例代码可以作为Java程序设计的参考,帮助读者更好地理解...
批量插入数据是一种提高数据库操作性能的重要技术,尤其在处理大量数据时。本篇文章将详细介绍如何使用Java实现JDBC批量插入数据,并比较三种常见的JDBC批量插入编程方法。 **方法一:使用PreparedStatement加批量...
在数据库操作中,效率至关重要,尤其是在处理大量数据时。JDBC(Java Database Connectivity)作为Java与数据库交互的标准接口,提供了一种批量处理SQL语句的功能,以提高处理速度,减少网络通信开销,从而优化整体...
在Java的数据库编程中,JDBC(Java Database Connectivity)提供了多种方法来实现数据的批量插入,从而提高数据库操作的效率。本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好...
综上所述,通过JDBC连接程序实现数据库数据迁移是一个涉及多步骤的过程,包括连接数据库、编写查询、处理结果、批量插入、资源管理和错误处理。在实际操作中,应根据具体业务需求进行调整和优化,确保迁移的高效和...
批处理操作在处理大量数据时非常有用,可以减少网络通信次数,提升性能。在JDBC中,批处理主要通过Statement对象的addBatch()和executeBatch()方法实现: 1. 添加批处理:首先创建Statement对象,然后使用addBatch...
批量插入数据时,可以使用`addBatch()`和`executeBatch()`方法,以减少与数据库交互的次数。 对于数据导出,可能是读取数据库数据并写入文件,多线程可以并行处理不同的数据段,加快写入速度。可以使用`...
【IT十八掌徐培成】Java基础第23天的课程主要聚焦在JDBC操作数据库时的批量处理技术,特别是`addBatch`和`executeBatch`这两个关键方法。在Java中,当我们需要对数据库进行大量数据的插入、更新或删除操作时,传统的...
- 批量处理:当有大量数据操作时,使用批处理可以大大提高效率。 - 连接池:通过连接池管理数据库连接,避免频繁创建和关闭连接,提高系统性能。 总结来说,JDBC是Java开发中与数据库交互的核心技术,它提供了丰富...
**JDBC处理Oracle数据详解** Java Database Connectivity (JDBC) 是Java编程语言中用于与数据库交互的一组标准API。Oracle数据库是世界上最广泛使用的数据库系统之一,尤其在企业级应用中占据主导地位。JDBC提供了...
当处理大量数据时,使用JDBC进行有效的数据操作变得尤为重要。本篇文章将深入探讨如何通过批处理来优化JDBC操作,并避免在大数据读取过程中出现错误。 #### 一、JDBC批处理的基本概念 批处理是指将多个单独的SQL...
在Java开发中,当需要向MySQL数据库大量插入数据时,使用JDBC的批量处理功能可以显著提高效率。本文将详细讲解如何使用JDBC批量插入10万条数据,并探讨其背后的原理和优化策略。 批量处理在JDBC中主要通过Statement...