作者:和伟
转贴请注名作者和出处
通常我们使用java开发项目时,最容易碰到的两个问题:
一是数据库连接的耗尽
二为内存的溢出(Memory leak),即常见的OutMemory Error
为什么会造成这两点问题并始终困惑许多开发人员?究其原因,大多数是由于我们程序编写的不规范而引起的,如果我们能够在程序的
编写中尽量的遵循一些基本的规范和原则,相信这些问题都是可以避免的
我们来看下困惑我们的第一个问题,关于数据库连接耗尽问题
编写面向企业的J2EE程序,我们始终离不开数据库方面的操作,数据库也是同程序员亲密接触的一项重要的工作之一,而在对数据库的
操作中,我们是通过获取数据库的连接(Connection)来进行数据库操作的,而数据库的连接是非常有限的,这就需要我们在实际的项目
程序编写中更要谨慎和吝啬(^_^),仔细的去使用这些有效的连接.
在java中常用的操作数据库连接方法有直接通过JDBC操作数据库,也有通过面向对象的方法进行操作(Hibernate等),接下来我就以这两者
说明下如何合理、有效的使用这些有限的数据库连接。
通过JDBC直接操作数据库,是我们采用的最广泛的方法,这种方式可以直接的、方便和灵活的嵌入程序中,通过直接操作数据库来取出
我们所需要的数据,但对于一般的开发者来说,如果在程序的编写中编写的不规范(程序以及SQL的执行效率、连接未及时关闭、多表操
作时的不恰当引起死锁等), 都可能会在项目的实践中带来隐患和问题
程序的执行效率
如果一sql语句需要反复在程序中执行,建议使用JDBC中PreparedStatement 代替 Statement,这样做的好处有两点
1、程序的运行效率会提高,尤其是在预先绑定参数、多次反复执行时会更加明显
2、避免SQL注射(injection)的攻击
SQL数据库等的优化执行效率
通常来讲,数据库为提高sql的执行效率,总是会在sql语句执行前进行一些优化操作,但是如果在实际的项目中,如果我们能够自己预先
对现有的sql语句进行优化操作,将会更加提高sql的执行效率
类似sql优化的一些常用的却是非常有效的建议如下:
1、适当的建立索引
2、字段提取要按照"需多少、提多少"的原则,避免"select *"
3、改善SQL语句,虽然查询优化器可以根据where子句自动的进行查询优化,但是有时查询优化器就会不按照您的本意进行快速查询。
... //有关sql优化方面的技巧,更多可以去查阅相关的sql优化书籍等
连接的未及时关闭
一种最常见的疏忽就是在写完一个Connection连接后忘记使用Connection.close()方法对其关闭了,这种疏忽往往会发生在实践开发
经验不足的开发人员身上,一种最简单的解决方法就是在条件执行完毕后加上finally语句,并将close()方法增加到其中来防止这种疏忽.
在跳转之前忘记及时关闭连接
最常见的现象发生在程序在结束或中途需要跳转(Forward或redirection)到另一地方时而忘记关闭连接,而这种现象相对于忘记关闭
连接更难以排除。
多表操作时的不规范引起的死锁
死锁,显而会给我们的项目带来问题,而造成死锁的原因大多数是由于我们程序编写的不合理而引起的,需要说明的是,死锁也是造
成数据库连接短时间内耗尽的一个原因,尤其是在并发很多条件下。