`
yangyiqian
  • 浏览: 117308 次
  • 来自: ...
社区版块
存档分类
最新评论

JDBC addbatch批量处理数据时有最大值限制

    博客分类:
  • JAVA
阅读更多
在用jdbc向数据灌入数据时,发现120000的数据每次只能灌入50000多条,其他的就没有了。
在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 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);
		}

	}





分享到:
评论
2 楼 x影千绝 2016-10-09  
1 楼 hunnuxiaobo 2011-10-18  
为什么呢?

相关推荐

    JDBC的批量处理语句

    JDBC 批量处理语句是指使用 JDBC 连接数据库时,批量执行 SQL 语句的方法。这种方法可以大大提高更新处理速度,减少数据库访问次数,提高应用程序的性能。 在 JDBC 中,批量处理语句包括两个方法:addBatch(String)...

    JDBC的批量处理数据

    通过合理利用JDBC的批量处理功能,开发者可以优化数据操作的性能,特别是在处理大数据量时,能有效减少数据库的负担,提高系统的整体响应速度。因此,理解和掌握批量处理是每个Java数据库开发者必备的技能之一。

    jdbc-批量插入数据

    本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...

    JDBC批量插入 更新 删除等操作

    批量操作是指在一次数据库连接中执行多次SQL语句的操作,这种方式能显著提高程序性能,尤其是在处理大量数据时。 **批量插入**主要用于数据导入和日志记录等场景。例如,在日志系统中,通常会将日志信息先写入到...

    jdbc批量 (绝对经典)

    JDBC的批量处理机制是提高数据库操作效率的重要手段,尤其是在处理大量数据时。普通插入、批处理和存储过程的批量执行各有特点和适用场景。普通插入适用于小规模数据操作,而批处理和存储过程则更适合于大规模数据...

    java数据批量处理

    在Java编程领域,数据批量处理是一项常见的任务,尤其在大数据、数据库操作以及系统集成等场景中,批量处理能显著提高效率并减少资源消耗。本文将深入探讨Java如何进行数据批量处理,涉及的主要知识点包括批量读取、...

    Mybatis与JDBC批量插入MySQL数据库性能测试

    在数据库操作中,批量插入(Batch Insert)是一种提高性能的有效方式,尤其是在处理大量数据时。本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database ...

    jdbc批量插入大字段

    在处理大量Blob数据时,传统的单条插入方式可能会导致性能低下,因为每条SQL语句都需要与数据库进行交互,这会增加网络传输和数据库处理的开销。因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC...

    Java实现批量向mysql写入数据的方法

    本文中提供了一个完整的示例代码,演示了Java实现批量向mysql写入数据的方法,包括JDBC连接mysql数据库、批量向mysql写入数据和基本的异常处理等操作。该示例代码可以作为Java程序设计的参考,帮助读者更好地理解...

    java实现jdbc批量插入数据

    批量插入数据是一种提高数据库操作性能的重要技术,尤其在处理大量数据时。本篇文章将详细介绍如何使用Java实现JDBC批量插入数据,并比较三种常见的JDBC批量插入编程方法。 **方法一:使用PreparedStatement加批量...

    批量处理JDBC语句提高处理速度

    在数据库操作中,效率至关重要,尤其是在处理大量数据时。JDBC(Java Database Connectivity)作为Java与数据库交互的标准接口,提供了一种批量处理SQL语句的功能,以提高处理速度,减少网络通信开销,从而优化整体...

    jdbc连接程序实现不同数据库数据的迁移

    综上所述,通过JDBC连接程序实现数据库数据迁移是一个涉及多步骤的过程,包括连接数据库、编写查询、处理结果、批量插入、资源管理和错误处理。在实际操作中,应根据具体业务需求进行调整和优化,确保迁移的高效和...

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

    批处理操作在处理大量数据时非常有用,可以减少网络通信次数,提升性能。在JDBC中,批处理主要通过Statement对象的addBatch()和executeBatch()方法实现: 1. 添加批处理:首先创建Statement对象,然后使用addBatch...

    java多线程实现大批量数据导入源码

    批量插入数据时,可以使用`addBatch()`和`executeBatch()`方法,以减少与数据库交互的次数。 对于数据导出,可能是读取数据库数据并写入文件,多线程可以并行处理不同的数据段,加快写入速度。可以使用`...

    【IT十八掌徐培成】Java基础第23天-03.ppst-addBatch-executeBatch.zip

    【IT十八掌徐培成】Java基础第23天的课程主要聚焦在JDBC操作数据库时的批量处理技术,特别是`addBatch`和`executeBatch`这两个关键方法。在Java中,当我们需要对数据库进行大量数据的插入、更新或删除操作时,传统的...

    JDBC数据访问技术.rar

    - 批量处理:当有大量数据操作时,使用批处理可以大大提高效率。 - 连接池:通过连接池管理数据库连接,避免频繁创建和关闭连接,提高系统性能。 总结来说,JDBC是Java开发中与数据库交互的核心技术,它提供了丰富...

    JDBC处理oracle数据共17页.pdf.zip

    **JDBC处理Oracle数据详解** Java Database Connectivity (JDBC) 是Java编程语言中用于与数据库交互的一组标准API。Oracle数据库是世界上最广泛使用的数据库系统之一,尤其在企业级应用中占据主导地位。JDBC提供了...

    JDBC批处理数据

    当处理大量数据时,使用JDBC进行有效的数据操作变得尤为重要。本篇文章将深入探讨如何通过批处理来优化JDBC操作,并避免在大数据读取过程中出现错误。 #### 一、JDBC批处理的基本概念 批处理是指将多个单独的SQL...

    Java使用JDBC向MySQL数据库批次插入10W条数据(测试效率)

    在Java开发中,当需要向MySQL数据库大量插入数据时,使用JDBC的批量处理功能可以显著提高效率。本文将详细讲解如何使用JDBC批量插入10万条数据,并探讨其背后的原理和优化策略。 批量处理在JDBC中主要通过Statement...

    JDBC数据连接源码.rar

    **JDBC数据连接源码详解** Java Database Connectivity (JDBC) 是Java编程语言与各种数据库交互的一种标准接口。它由Sun Microsystems(现为Oracle公司)开发,为Java开发者提供了访问数据库的强大工具。JDBC允许...

Global site tag (gtag.js) - Google Analytics