`
wenhai_zhang
  • 浏览: 184748 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[转] JDBC优化策略总结

    博客分类:
  • java
阅读更多

最近在java中国上面看到一篇关于JDBC的文章总结,借来看看,转一下,以备学习之用。

 

  相比Hibernate、iBatis、DBUtils等,理论上JDBC的性能都超过它们。JDBC提供更底层更精细的数据访问策略,这是Hibernate等框架所不具备的。 
  在一些高性能的数据操作中,越高级的框架越不适合使用。这里是我在开发中对JDBC使用过程中一些优化经验总结。
  1、选择纯Java的JDBC驱动。
  2、使用连接池--使用一个“池”来管理JDBC连接,并精心调试池配置的参数,目前可用的数据库连接池很多很多。
  如何配置合适的参数呢,需要的是测试,而不是感觉。
  3、重用Connection--最大限度使用每个数据库连接,得到了就不要轻易“丢弃”。
  有时候在一个过程中,会多次操作数据库,而仅仅需要一个连接就够了,没必用一次就获取一个连接,用完后关闭或者入池。这样会增加“池”管理的成本,千万别以为你用了“池”就可以随便申请和归还连接,都是有代价的。如果是一个庞大循环块中操作数据库,更应该注意此问题!
  4、重用Statement--对于一些预定义SQL,设置为静态常量,并尽可能重用预定义SQL产生的PreparedStatement对象。对于多次使用一种模式的SQL,使用预定义SQL可以获取更好的性能。
  5、使用批处理SQL。
  6、优化结果集ResultSet--查询时候,返回的结果集有不同的类型,优先选择只读结果集、不可滚动的属性。
        这里是很容易出现问题的地方:
java.sql.ResultSet static int CLOSE_CURSORS_AT_COMMIT
                        该常量指示调用 Connection.commit 方法时应该关闭 
ResultSet 对象。    static int CONCUR_READ_ONLY 
                       该常量指示不可以更新的 ResultSet 对象的并发模式。    
static int CONCUR_UPDATABLE
                        该常量指示可以更新的 ResultSet 对象的并发模式。    
static int FETCH_FORWARD  
                        该常量指示将按正向(即从第一个到最后一个)处理结果集中的行。   
static int FETCH_REVERSE
                        该常量指示将按反向(即从最后一个到第一个)处理结果集中的行处理。    
static int FETCH_UNKNOWN
                        该常量指示结果集中的行的处理顺序未知。    
static int HOLD_CURSORS_OVER_COMMIT 
                        该常量指示调用 Connection.commit 方法时不应关闭 ResultSet 对象。    
static int TYPE_FORWARD_ONLY
                        该常量指示指针只能向前移动的 ResultSet 对象的类型。    static int TYPE_SCROLL_INSENSITIVE
                        该常量指示可滚动但通常不受其他的更改影响的 ResultSet 对象的类型。    
static int TYPE_SCROLL_SENSITIVE
                        该常量指示可滚动并且通常受其他的更改影响的 ResultSet 对象的类型。
  
说明下:

        结果集分两种类型:只读和可更改,只读的话,更省内存,查询的结果集不能更改。如果结果集在查询后,更改了值又要保存,则使用可更改结果集。

  结果集的游标也有两种类型:如果没必要让游标自由滚动,则选择单方向移动的游标类型。

  对于是否并发操作:如果不需要考虑线程安全,则选择忽略并发的结果集类型,否则选择并发安全的类型。

  另外,还要控制结果的大小,几乎所有的数据库都有查询记录条数控制的策略,可以海量数据进行分批处理,一次一批,这样不至于把系统搞死。

  7、事物优化--如果数据库不支持事物,就不要写回滚代码,如果不考虑事物,就不要做事务的控制。

  8、安全优化--管理好你的Connection对象,在异常时候能“入池”或者关闭。因此应该将Connection释放的代码写在异常处理的finally块中。

  9、异常处理优化--不要轻易吞噬SQLException,对于DAO、Service层次的数据访问,一般在DAO中跑出异常,在Service中处理异常。但DAO中也可以处理异常,并做转义抛出,不要随便抛出RuntimeExeption,因为这是JVM抛出的,不需要你可以去抛出,因为RuntimeException往往会导致系统挂起。

  10、代码高层优化--在以上的基础上,优化封装你的数据访问方式,尽可能让代码简洁好维护,如果你还觉得性能不行,那就该从整个系统角度考虑优化了,比如加上缓存服务器,集群、负载均衡、优化数据库服务器等等,以获取更好的系能。

  




本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/225828

 

先记一下,明天再研究。感谢原创。

 

张文海

分享到:
评论

相关推荐

    JDBC性能优化.pdf

    ### JDBC性能优化详解 ...需要注意的是,性能优化是一个持续的过程,开发者需要不断评估应用程序的实际运行情况,并针对性地调整策略。希望本文能够为那些正在努力提高JDBC应用程序性能的开发者们提供有价值的参考。

    jdbc资源总结jdbc

    ### JDBC优化技巧 1. 使用PreparedStatement而非Statement,减少解析时间。 2. 合理设置批处理大小,避免内存溢出。 3. 使用PreparedStatement的占位符,防止SQL注入。 4. 使用连接池(如C3P0、HikariCP)管理...

    jdbc_on_oracle

    5. **性能优化**:提供JDBC查询优化策略,如使用PreparedStatement、批处理、并行查询等技术,减少网络延迟,提升应用程序响应速度。 6. **安全性与最佳实践**:强调在使用JDBC时的安全考虑,如SQL注入防护、权限...

    jdbc总结

    ### JDBC优化策略 1. **使用PreparedStatement**:减少SQL解析时间,提高性能。 2. **批处理**:通过Statement的addBatch()和executeBatch()方法,一次执行多条SQL,降低网络通信次数。 3. **连接池**:使用连接...

    polardb-jdbc18.zip

    PolarDB-JDBC18优化了网络通信协议,减少了网络延迟,提升了数据读写性能。同时,它支持PolarDB的分布式事务处理,保证了业务的强一致性。 2.2 兼容性 该驱动兼容JDBC 4.2及以上版本,同时也兼容大多数主流的Java...

    Jdbc实用教程

    **JDBC实用教程** 在Java开发中,JDBC(Java Database Connectivity)是连接Java应用程序与...本教程详细阐述了JDBC的各个方面,包括API、连接步骤、事务管理以及优化策略,旨在帮助学习者全面理解并熟练运用JDBC。

    jdbc(jar文件)

    10. **性能优化**:使用JDBC时,可以考虑批处理操作、结果集缓存、关闭不必要的资源等策略来提高性能。 总结来说,这个压缩包中的jar文件是连接Eclipse与MySQL、Oracle和SQL Server数据库的关键,提供了Java程序与...

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

    总结来说,Java JDBC数据库连接池是解决Web应用中数据库访问性能问题的有效工具,通过统一管理和复用数据库连接,降低了系统资源消耗,提高了应用的响应速度和稳定性。合理配置和使用连接池,对于构建高效、稳定的...

    Java jdbc数据库连接池总结2

    如果没有,连接池可能会按照预设策略(如最大等待时间)进行处理,如阻塞等待或抛出异常。 3. **使用连接**: 应用程序获取到连接后,可以进行SQL查询、更新等操作。连接池通常提供事务管理功能,帮助应用程序更好地...

    数据库的JDBC驱动

    总结,JDBC驱动是Java应用程序与数据库之间的关键组件,了解其类型、使用方法以及优化策略对于开发高效、安全的数据库应用至关重要。正确选择和管理JDBC驱动,能有效提升数据库操作的效率和应用程序的稳定性。

    JdbcDriver

    9. JDBC优化 优化JDBC应用通常涉及减少数据库交互次数、使用批处理、预编译SQL语句、适当调整连接池大小等策略。 总结来说,JDBC驱动程序在Java与数据库之间的通信中扮演着至关重要的角色。理解其类型和工作原理,...

    JDBC驱动大全

    **JDBC驱动大全** 在Java编程中,JDBC(Java Database Connectivity)是Java语言与各种数据库进行交互的一...在实际项目中,选择正确的驱动类型、正确配置连接参数以及优化SQL执行策略,都是提高系统性能的关键步骤。

    JDBC数据同步

    总结来说,JDBC数据同步是Java开发中解决多数据库一致性问题的关键技术。通过理解JDBC的工作原理,选择合适的同步策略,结合`transData`文件的使用,我们可以构建高效稳定的数据同步系统,确保业务数据的一致性和...

    sqljdbc4-4.0.jar

    总结,SQLJDBC4-4.0.jar是Java开发人员与SQL Server数据库互动的关键工具,正确理解和使用它可以实现高效、安全的数据库操作。当遇到“Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0”这样的问题时,应检查...

    JDBC数据库连接池总结.pdf

    【JDBC数据库连接池总结】 在Java开发中,JDBC(Java Database Connectivity)是用于连接应用程序和数据库的关键技术。JDBC提供了一套API,使得开发者能够以标准的方式编写数据库交互代码。然而,直接使用JDBC在高...

    x-pack-sql-jdbc-7.4.2

    总结,X-Pack SQL JDBC 7.4.2是Elasticsearch与传统数据库世界之间的桥梁,它使得SQL成为操作Elasticsearch的强大工具。无论你是Java开发者还是数据库管理员,都能通过这个版本享受到更加高效、安全和灵活的数据管理...

    JDBC简单分页方案

    **JDBC分页的实现策略** 面对这一问题,开发者通常需要借助JDBC提供的资源自行实现分页。基本思路是首先初始化分页参数,如页面大小(pageSize)、当前页(currentPage)、记录总数(countOfRows)以及页面总数...

    Dm7JdbcDriver.rar

    总结来说,"Dm7JdbcDriver.rar" 提供的达梦数据库JDBC驱动是Java开发者和Kettle用户连接达梦数据库的重要工具,它简化了数据库操作,并在数据集成和处理中发挥关键作用。正确理解和使用这个驱动,可以有效地实现Java...

    JDBC API教程与参考手册(第三版)前言+目录+第一,二章

    - 探讨JDBC性能优化策略及最佳实践。 #### 目录概览 - **第1章:JDBC基础** - JDBC简介 - 安装配置指南 - 第一个JDBC程序 - 连接数据库 - 执行SQL语句 - **第2章:JDBC核心API** - DriverManager类详解 - ...

Global site tag (gtag.js) - Google Analytics