通常的操作方法
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.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2010-02-09 15:19
zhyiwww 閱讀(653)
評論(0) 編輯 收藏 所屬分類:
j2ee