大家都知道使用hibernate可以简化数据库的操作,减少一大堆try…catch的书写,以及关闭数据库的操作,大大方便了程序员的开发。然而有时候我们不得不采用jdbc,比如在银行业务中处理大批量业务数据,并对这些数据进行操作,这个时候hibernate就不太合适了。
先上一段代码:
这段代码看上去没问题,主要作用是关闭数据库。其实是容易产生陷阱的。
首先当 statement为空时,就会抛出空指针异常,导致connection没有关闭,这样的话数据库是不会关闭的,最终会影响性能。因此我们需要对statement进行判断
代码应该如下:
同时对connection也进行了判断是否为空,这样代码是安全了,但是还是有一个隐患。
在代码中出现
最后一个要注意的就是尽量使用PreparedStatement来代替Statement
先上一段代码:
public void releaseResources() {
try {
if (statement != null) {
statement.close();
statement = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这段代码看上去没问题,主要作用是关闭数据库。其实是容易产生陷阱的。
首先当 statement为空时,就会抛出空指针异常,导致connection没有关闭,这样的话数据库是不会关闭的,最终会影响性能。因此我们需要对statement进行判断
代码应该如下:
public void releaseResources() {
if (statement != null) {
try {
statement.close();
statement = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (connection != null)
try {
connection.close();
connection = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
同时对connection也进行了判断是否为空,这样代码是安全了,但是还是有一个隐患。
在代码中出现
// TODO Auto-generated catch block
e.printStackTrace();
这就表明是eclipse自动生成的,没有这段代码进行处理的。如果将抛出异常的代码的底层信息在web上或者桌面程序上显示,用户是接受不了的。因此我们有必要使用logger.debug(e);将异常信息记录在日志里面,而对于客户,可以抛出一个自定义封装的异常。最后一个要注意的就是尽量使用PreparedStatement来代替Statement