通常的操作方法
public List<Category> queryCategory(String queryStr) throws SQLException {
ArrayList<Category> catList = new ArrayList<Category>();
PreparedStatement pstmt = DBUtil.getConnection().prepareStatement(
queryStr);
if (pstmt == null) {
return catList;
} else {
ResultSet rst = pstmt.executeQuery();
while (rst.next()) {
Category c = new Category();
c.setCategoryId(rst.getInt("CATEGORY_ID"));
c.setCategoryName(rst.getString("CATEGORY_NAME"));
c.setCategoryParent(rst.getInt("PARENT_ID"));
catList.add(c);
}
rst.close();
pstmt.getConnection().close();
}
return catList;
}
这种方式是不保险的方式,因为此处并不处理异常,但是不排除会发生异常。
假设在黑体代码部分发生异常,那么下面的代码并不会执行,也就是说,rst,pstmt,con都不会关闭掉。
所以导致的结果是这些资源得不到释放。
解决的方法,就是在最后用finally去解决问题
PreparedStatement pstmt = null;
ResultSet rst = null;
try {
pstmt = this.getPstmt(queryStr);
rst = pstmt.executeQuery();
while (rst.next()) {
Category c = new Category();
c.setCategoryId(rst.getInt("CATEGORY_ID"));
c.setCategoryName(rst.getString("CATEGORY_NAME"));
c.setCategoryParent(rst.getInt("PARENT_ID"));
catList.add(c);
}
} catch (SQLException e) {
throw e;
}finally{
if(rst!=null){
rst.close();
}
if(pstmt!=null){
pstmt.close();
}
if(this.getCon()!=null&&this.getCon().getAutoCommit()){
this.getCon().close();
}
}
这样,无论在那个地方发生了异常,都能让资源得到释放。
|----------------------------------------------------------------------------------------|
版权声明 版权所有 @zhyiwww
引用请注明来源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2010-02-09 15:19
zhyiwww 阅读(648)
评论(0) 编辑 收藏 所属分类:
j2ee