`
coolxing
  • 浏览: 870486 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:96095
社区版块
存档分类
最新评论

JDBC的批处理机制

    博客分类:
  • JDBC
阅读更多

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.] 

 

需要向数据库发送多条sql语句时, 为了提升执行效率, 可以考虑采用JDBC的批处理机制. JDBC的批处理机制主要涉及Statement或PreparedStatement对象的以下方法:

|--addBatch(String sql) :Statement类的方法, 多次调用该方法可以将多条sql语句添加到Statement对象的命令列表中. 执行批处理时将一次性的把这些sql语句发送给数据库进行处理.

|--addBatch(): PreparedStatement类的方法, 多次调用该方法可以将多条预编译的sql语句添加到PreparedStatement对象的命令列表中. 执行批处理时将一次性的把这些sql语句发送给数据库进行处理.

|--executeBatch():把Statement对象或PreparedStatement对象命令列表中的所有sql语句发送给数据库进行处理.

|--clearBatch():  清空当前sql命令列表.

 

 

/*
 * create table batch_test(id int primary key auto_increment, name varchar(40), age int);
 */
public class BatchTest {
	@Test
	public void statementBatch() {
		Connection conn = null;
		Statement st = null;
		String sql_1 = "insert into batch_test(name, age) values('coolxing', 24)";
		String sql_2 = "insert into batch_test(name, age) values('coolmin', 22)";
		String sql_3 = "insert into batch_test(name, age) values('yong', 21)";
		String sql_4 = "update batch_test set name='java' where id=1";

		try {
			conn = JdbcUtils.getConnection();
			st = conn.createStatement();
			st.addBatch(sql_1);
			st.addBatch(sql_2);
			st.addBatch(sql_3);
			st.addBatch(sql_4);
			st.executeBatch();
			st.clearBatch();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, st, conn);
		}
	}

	@Test
	public void preparedStatementBatch() {
		Connection conn = null;
		PreparedStatement st = null;
		String sql = "insert into batch_test(name, age) values(?, ?)";

		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			for (int i = 0; i < 10002; i++) {
				st.setString(1, "coolxing_" + i);
				st.setInt(2, i);
				st.addBatch();
				// 需要防止Preparedstatement对象中的命令列表包含过多的待处理sql语句, 而造成outOfMemory错误
				if (i % 500 == 0) {
					st.executeBatch();
					st.clearBatch();
				}
			}
			// 将剩下的未处理命令发送给数据库
			st.executeBatch();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, st, conn);
		}
	}
}

 

 

总结: 采用Statement.addBatch(sql)方式实现批处理可以向数据库发送不同类型的sql语句, 但是这些sql语句没有进行预编译, 执行效率不高. 且需要列出每一个sql语句. 而PreparedStatement.addBatch()只能应用在类型相同参数不同的sql语句中, 此种形式的批处理经常用于在同一个表中批量插入数据, 或批量更新表的数据.

注意不要一次性向命令列表中添加数量过多的sql语句, 防止出现outOfMemory错误.

1
3
分享到:
评论

相关推荐

    jdbc连接数据库的方式2

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

    jdbc基础和参考

    JDBC批处理: addBatch executeBatch Statement PreparedStatement Statement{ 1.获取连接 getConnection(); 2.创建Statement conn.createStatement(); 3.执行sql语句 String sql .... insert delete update ...

    day01.环境变量,HelloWorld,常量

    - **第五部分:MySQL/JDBC核心技术:**`SQL语句`、`数据库连接池`、`DBUtils`、`事务管理`、`批处理`、 今日重点: 1.安装jdk 2.会配置环境变量 3.会常用的dos命令 4.会编写helloworld 5.会使用注释对代码进行...

    高效Java数据访问组件Uncode-DAL全功能源码

    Uncode-DAL是一个功能全面的Java数据访问层组件,它深度整合了MyBatis、Spring JDBC以及Hibernate等主流ORM框架,致力于为开发者提供一套简便、高效的数据操作解决方案。该组件支持多数据源配置,能够实现读写分离、...

    apache-commons源码及jar文件

    DbUtils 是一个 JDBC helper 类库,完成数据库任务的简单的资源清除代码. Digester Commons-Digester 是一个 XML-Java对象的映射工具,用于解析 XML配置文件. Discovery Commons-Discovery 提供工具来定位资源 ...

    javaSE代码实例

    13.2.2 “一次投入,终身回报”的String内存机制 249 13.2.3 String对象特殊机制付出的代价 252 13.3 StringBuffer类 253 13.3.1 弥补String不足的StringBuffer类 253 13.3.2 编写方法链以及StringBuffer类...

    JAVA 范例大全 光盘 资源

    实例188 简单的JDBC连接 608 实例189 RowSet接口 610 实例190 调用存储过程 617 实例191 图片文件存入数据库 620 实例192 数据库图片的输出 622 实例193 利用console控制台运行类中的汉字处理方案 624 实例194...

    Java学习笔记-个人整理的

    {13.4}批处理模式}{195}{section.13.4} {13.5}分页查询}{196}{section.13.5} {13.5.1}MySQL}{198}{subsection.13.5.1} {13.6}连接池}{199}{section.13.6} {13.6.1}Wrapper}{199}{subsection.13.6.1} {13.7}DAO...

    Java范例开发大全 (源程序)

     实例161 垃圾回收的机制 250  第9章 面向对象的四大特征(教学视频:65分钟) 252  9.1 抽象 252  实例162 求自定义几何图形的面积和周长 252  实例163 使用抽象方法实现的支票夹 254  9.2 封装 257  ...

    java范例开发大全(pdf&源码)

    实例161 垃圾回收的机制 250 第9章 面向对象的四大特征(教学视频:65分钟) 252 9.1 抽象 252 实例162 求自定义几何图形的面积和周长 252 实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛...

    java范例开发大全源代码

     实例161 垃圾回收的机制 250  第9章 面向对象的四大特征(教学视频:65分钟) 252  9.1 抽象 252  实例162 求自定义几何图形的面积和周长 252  实例163 使用抽象方法实现的支票夹 254  9.2 封装 ...

    java范例开发大全

    实例161 垃圾回收的机制 250 第9章 面向对象的四大特征(教学视频:65分钟) 252 9.1 抽象 252 实例162 求自定义几何图形的面积和周长 252 实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛...

    Java范例开发大全(全书源程序)

    实例161 垃圾回收的机制 250 第9章 面向对象的四大特征(教学视频:65分钟) 252 9.1 抽象 252 实例162 求自定义几何图形的面积和周长 252 实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界...

Global site tag (gtag.js) - Google Analytics