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

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

    数据库连接

    PreparedStatement允许我们在SQL语句中使用参数占位符,然后在执行时传入实际值,从而可以多次复用同一SQL模板,提高执行效率。 批量处理是优化数据库操作的另一个关键策略。通过将多个SQL语句组合在一起,一次性...

    Utils工具类和配置文件类.rar

    在Java编程中,Utils工具类通常是一些包含各种静态方法的类,这些方法可以用于执行通用的任务,如数据处理、I/O操作或者如本例中与数据库交互。这里我们主要关注的是一个名为"DbUtils"的Utils工具类,它被设计来简化...

    java面试知识

    ##### jdbc批量处理数据 - 使用PreparedStatement对象的addBatch()方法添加SQL语句。 - 调用executeBatch()执行所有SQL语句。 ##### Oracle分页 - 使用ROWNUM伪列结合子查询实现分页。 - 或使用WITH子句配合RANK...

    《基于YOLOv8的核废料运输容器表面污染监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    《基于YOLOv8的智慧社区独居老人生命体征监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    《基于YOLOv8的智慧社区独居老人生命体征监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计

    Android Studio Meerkat 2024.3.1 Patch 1(android-studio-2024.3.1.14-mac.zip.001)

    Android Studio Meerkat 2024.3.1 Patch 1(android-studio-2024.3.1.14-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/90557060 part2: https://download.csdn.net/download/weixin_43800734/90557056

    侧轴承杯加工工艺编制及夹具设计.zip

    侧轴承杯加工工艺编制及夹具设计.zip

    NASA数据集锂电池容量特征提取(Matlab完整源码和数据)

    NASA数据集锂电池容量特征提取(Matlab完整源码和数据) 作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,主做机器学习和深度学习时序、回归、分类、聚类和降维等程序设计和案例分析,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信。

    板料折弯机液压系统设计.zip

    板料折弯机液压系统设计.zip

    C6150车床的设计.zip

    C6150车床的设计.zip

    机器学习之KNN实现手写数字

    机器学习之KNN实现手写数字

    python爬虫例程智能代理池爬虫(自适应切换代理)

    python爬虫;智能切换策略,反爬检测机制

    mpls-vpn-optionA-all

    mpls-vpn-optionA-all

    软件工程中期答辩1234567

    56tgyhujikolp[

    GB 6442-86企业职工伤亡事故调查分析规则.pdf

    GB 6442-86企业职工伤亡事故调查分析规则.pdf

    汽车液压式主动悬架系统的设计().zip

    汽车液压式主动悬架系统的设计().zip

    【更新至2024年】2000-2024年各省专利侵权案件结案数数据

    2000-2024年各省专利侵权案件结案数数据 1、时间:2000-2024年 2、来源:国家知识产权J 3、指标:专利侵权案件结案数 4、范围:31省 5、用途:可用于衡量知识产权保护水平

    《基于YOLOv8的零售柜商品有效期识别系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    金融数学课程作业复现:MATLAB实现期权定价与投资组合优化(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文档详细复现了金融数学课程作业,涵盖欧式看涨期权定价和投资组合优化两大部分。对于欧式看涨期权定价,分别采用Black-Scholes模型和蒙特卡洛方法进行了计算,并对彩虹期权进行了基于最大值的看涨期权定价。投资组合优化部分则探讨了最小方差组合、给定收益的最小方差组合、最大效用组合以及给定风险的最大收益组合四种情形,还对比了拉格朗日乘数法和二次规划求解器两种方法。文中不仅提供了详细的MATLAB代码,还有详尽的中文解释,确保每一步骤清晰明了。 适合人群:金融工程专业学生、量化分析师、金融数学爱好者。 使用场景及目标:①帮助学生理解和掌握金融衍生品定价的基本原理和方法;②为从事量化分析的专业人士提供实用工具和技术支持;③作为教学材料辅助高校教师讲授相关内容。 其他说明:文档还包括了完整的论文结构建议,从封面页到结论,再到附录,涵盖了所有必要元素,确保提交的作业符合学术规范。此外,还特别强调了数据预处理步骤,确保代码可以顺利运行。

Global site tag (gtag.js) - Google Analytics