JDBC学习2-性能优化

来源:互联网 发布:淘宝分销平台官网 编辑:程序博客网 时间:2024/06/11 04:30

     JDBC应用的性能涉及到数据库、服务器、数据库驱动、系统的代码书写。这里谈论第4个方面。

 

一. Statement还是PreparedStatement

      PreparedStatement的开销比Statement大,所以PreparedStatement的速度会比Statement慢,但是PreparedStatement会缓存预编译的SQL语句,而Statement则每次都重新编译SQL语句,所以对于多次使用的SQL来说PreparedStatement的效果会好点,但是对于只使用一次的SQL语句,则Statement效果更佳。

 

二. 批量操作

      批量操作会把SQL语句一次性发给数据库,从而减少应用于数据库服务器的交互次数提高性能,但并不减少数据库服务器的I/O次数。在使用。在使用批量操作时应该设置每批数据的大小,否则可能内存溢出,在每批执行完毕后应该先关闭Statement或PreparedStatement释放内存。

 

三. 使用适当的setter跟getter

      使用PreparedStatement设置数据用对应的SetXxx,ResultSet用对应的getXxx,而用get/setObject性能则比较差。

 

四.  使用适当的ResultSet

       ResultSet有:

 

参数 int type

ResultSet.TYPE_FORWORD_ONLY 结果集的游标只能向下滚动。

ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下移动,当数据库变化时,当前结果集不变。

ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,当数据库变化时,当前结果集同步改变。

参数 int concurrency

ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表。

ResultSet.CONCUR_UPDATETABLE 能用结果集更新数据库中的表。

 

默认为:TYPE_FORWORD_ONLY跟CONCUR_READ_ONLY 此时效率最高。

 

五. 设置FectchSize

       此参数每次从数据库查询的数据行数,默认各个数据库不一样。如果太小可能引起过多的网络交互。

 

六. 设置合适的事务级别

       事务的隔离级别越高,所消耗的代价越到。所以设置合适的事务级别将提供性能。

 

七. 使用连接池

       一般操作数据库时都要获取一个连接用完后再关闭,如何将一个连接放到连接池里,用的时候拿出来,用完了放回。这样将大大提高性能。

 

原创粉丝点击