zhyiwww
          用平實的筆,記錄編程路上的點點滴滴………
          posts - 536,comments - 394,trackbacks - 0
          通常的操作方法
              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.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2010-02-09 15:19 zhyiwww 閱讀(655) 評論(0)  編輯  收藏 所屬分類: j2ee
          主站蜘蛛池模板: 天门市| 华蓥市| 石狮市| 五河县| 合作市| 宁城县| 临夏县| 甘泉县| 时尚| 精河县| 湾仔区| 庄浪县| 马关县| 安阳县| 宣汉县| 建瓯市| 邹城市| 安图县| 广平县| 理塘县| 磐安县| 西安市| 永州市| 黔东| 靖江市| 平昌县| 台北市| 建平县| 沙坪坝区| 元氏县| 乐清市| 平湖市| 濮阳县| 诸城市| 赤水市| 通山县| 桂林市| 河池市| 丰城市| 鄂尔多斯市| 沂水县|