`

JDBC操作数据库性能优化小结

 
阅读更多

最近做了一个使用JDBC操作数据库的小项目,主要实现不同数据库的数据表之间数据复制功能.以下是一些关于性能方面的总结:

 

1. 进行SQL查询,当预期的结果集较大的时候,使用PreparedStatement.setFetchSize(FETCH_SIZE)或者Statement.setFetchSize(FETCH_SIZE),可以成百倍地增加性能,我自己设置的值是525

2. 当ResultSet很大的时候,而我们需要读取保存ResultSet里面的数据的时候,起初将所有的数据保存在List或者HashMap里,在进行多线程运行的时候,导致了Java heap space out of memory. 最终将数据逐行写入到CSV文件中,避免了性能问题

3. 在进行大量数据插入数据库的操作时,应该使用批量加入,一次执行的策略,代码如下:

Connection destCon = DBHelper.getDestDBCon();
destCon.setAutoCommit(false);
PreparedStatement pstmt = destCon.prepareStatement(insertSql.toString());
while ((line = br.readLine())!= null) {
				count ++;
				items = line.split(",");
				pstmt.setString(1. items[0]);
                                pstmt.setBigDecimal(2, new BigDecimal(items[1]))
				}
				pstmt.addBatch();
				if (count%BATCH_SIZE == 0 || count == insert_size){
					pstmt.executeBatch();
					destCon.commit();
					destCon.setAutoCommit(false);		
			    }
			}

 并且一次性批量提交的数目是有限制的,还需要分批提交. 这样做就能大幅度提高插入的速度.

实测30万条数据插入只需要14秒

在进行以上优化以后,在使用多线程的情况下,每个线程操作几十万条数据进行读取,存储,插入,不存在性能问题

 

本文出自"lijingshou"博客,转载请务必保留此出处http://lijingshou.iteye.com/blog/2076882

1
1
分享到:
评论
1 楼 LinApex 2014-06-07  
哟西,这个是个好东西

相关推荐

    关于JDBC数据分页跨数据库小结.rar

    2. 性能优化:尽量避免全表扫描,使用索引优化查询,特别是对于ORDER BY子句,确保排序字段有索引。 3. 分页参数传递:将页码和每页大小作为参数传递,确保代码的可复用性。 4. 数据库连接管理:合理使用连接池,...

    Java jdbc数据库连接池总结.doc

    Java JDBC数据库连接池是Java应用程序与数据库交互的重要优化手段,旨在提高数据库访问效率和资源利用率。在传统的JDBC操作中,每次请求都需要建立和关闭数据库连接,这不仅耗时,还可能导致系统资源的过度消耗,...

    关于JDBC数据分页跨数据库小结.pdf

    这种方法适用于数据量较小的情况,避免了直接在数据库层面执行复杂的分页操作。然而,当数据量较大时,这种策略可能导致性能问题,因为它会占用更多的内存和网络资源。 五、跨数据库分页策略 为了实现跨数据库的...

    JDBC与Java数据库编程

    **1.8 小结** - JDBC体系结构包括JDBC驱动程序管理器接口和JDBCAPI。 - JDBCAPI包括`DriverManager`, `Connection`, `Statement`, `ResultSet`, `SQLException`等核心组件。 #### 第二章:JDBC基础应用 **2.1 ...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    第15章 RAC稳定性与性能优化 15.1服务器硬件 15.1.1 Firmware固件升级 15.1.2硬件设备兼容性 15.1.3 FC HBA卡冗余 15.1.4 Infiniband技术 15.1.5 RAC硬件结构案例 15.2操作系统 15.2.1认证操作系统 15.2.2...

    JDBC数据源连接池的配置和使用示例

    小结 了解和掌握数据源连接池的配置和使用是每个Java开发者必备的技能。通过选择合适的连接池,配置合理的参数,以及有效利用监控工具,可以大大提高应用的性能和稳定性。在实际项目中,应根据具体需求选择合适的...

    Jdbc深入分析

    **7.7 小结** 合理设置事务的隔离级别可以帮助避免常见的并发问题,如脏读、不可重复读等。 #### 八、PreparedStatement接口的使用 **8.1 PreparedStatement的优点** `PreparedStatement`接口克服了`Statement`...

    《动态Web数据库技术——基于JSP和XML技术实现》第9章xml与数据库.ppt

    **9.5 小结** XML在数据交换和存储中发挥了重要作用,尤其是在Web应用中。虽然XML数据存取速度相对较慢,且缺乏传统数据库的一些高级功能,但在某些场景下,如小规模数据和轻量级应用,XML可以直接作为数据库使用,...

    Java_JDBC学习教程 由浅入深.doc

    **8.7 小结** - 使用事务可以有效避免数据的不一致性问题。 - 了解和正确设置隔离级别对于保证数据的一致性和完整性至关重要。 #### 八、PreparedStatement 接口的使用 - `PreparedStatement` 是 `Statement` 的子...

    MySQL数据库:数据库系统的体系结构.pptx

    **小结** 总的来说,数据库系统的体系结构根据应用场景和需求,可以选择C/S、两层C/S、三层C/S或B/S结构。每种结构都有其优势和适用范围,选择时需考虑系统的可扩展性、安全性、性能和维护成本等因素。在实际应用中...

    jdbc 分页 sql语句

    #### 五、小结 本文详细介绍了如何使用JDBC实现Oracle数据库的分页查询。通过理解ROWNUM、子查询以及INNER JOIN等概念,我们不仅可以编写出高效的SQL语句,还能更好地优化应用程序性能。希望本文能对你有所帮助!

    Tomcat中配置MySQL数据库连接池.doc

    小结 Tomcat 中配置 MySQL 数据库连接池可以提高系统的性能和稳定性。使用数据库连接池可以将多个请求共享一个连接,从而提高了系统的性能和稳定性。在配置连接池时,需要根据实际情况进行参数配置,例如 maxActive...

    JSP连接数据库简单留言板实验报告

    同时,报告还应该分析系统的性能和可扩展性,讨论如何优化数据库查询,以及如何处理并发访问和错误处理。 提供的\2010081126吕吕.rar文件可能包含了整个实验的源代码和实验报告文档。打开这个RAR文件,可以查看具体...

    JDBC专题(三)-JDBC完成用户注册功能

    ##### 3.3 小结 使用PreparedStatement可以有效地避免SQL注入问题,同时也能提高执行效率。 #### 4. 使用PreparedStatement完成登录 利用PreparedStatement改进用户登录功能,以提高安全性并优化性能: ```java ...

Global site tag (gtag.js) - Google Analytics