牛仔褲的夏天

          JAVA是藍色的- online

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            30 隨筆 :: 5 文章 :: 15 評論 :: 0 Trackbacks
          在Jdon.com里面看到的,覺得很值得借鑒
          原文:http://www.jdon.com/jive/thread.jsp?forum=16&thread=302

          看下面比較:

          public List getUsers() 
            ResultSet rs 
          = userDbQuery();
            List retval 
          = new ArrayList();
            
          while (rs.next()) {
              retval.add(rs.getString(
          1));
            }

            
          return retval;
          }
          上面是個我們采取返回Collection后最常用的方法,將ResultSet中的用戶名加入List再返回,顯然這很耗費內存。

          使用Iterator返回:
          public Iterator getUsers() {
            
          final ResultSet rs = userDbQuery();
              
          return new Iterator() {
                
          private Object next;
                
          public void hasNext() {
                  
          if (next == null{
                    
          if (! rs.next()) {
                      
          return false
                    }
           
                    next 
          = rs.getString(1);
                  }

                  
          return true;
                }


                
          public Object next() {
                  
          if (! hasNext()) {
                    
          throw new NoSuchElementException();
                  }

                  String retval 
          = next;
                  next 
          = null;
                  
          return retval;
                }


                
          public void remove() {
                  
          throw new UnsupportedOperationException ("no remove allowed");
                }

             }

          }

          這個Javabean只是做了一個指針傳遞作用,將調用本Javabean的指針傳遞到ResultSet,這樣既提高了效率,節約了內存,又降低了偶合性,這是堪稱中間件典型的示范。


          posted on 2006-03-15 16:56 luckyrobbie 閱讀(5454) 評論(6)  編輯  收藏 所屬分類: Java

          評論

          # re: 一個取到ResultSet后返回Iterator的例子 2006-03-15 18:00 劍事
          兩種方法各有優點
          不過感覺也都一般
          第一個占內存,損失了內存又沒方便多少
          第二個占連接,損失了連接又沒快多少

          http://www.aygfsteel.com/jfy3d/archive/2005/05/12/4185.html
          我實現的比第一個方便  回復  更多評論
            

          # re: 一個取到ResultSet后返回Iterator的例子 2006-03-15 20:40 luckyrobbie
          “第二個占連接,損失了連接又沒快多少” 沒損失,連接斷了后rs依然存在的

          你的做法和我以前的做法一樣的,把一行放在一個HashMap中,然后把結果集封裝在一個Vector或者ArrayList中,然后在通過客戶化的標簽進行View的顯示,你可以看我這篇隨筆http://www.aygfsteel.com/luckyrobbie/archive/2006/03/10/34648.aspx  回復  更多評論
            

          # re: 一個取到ResultSet后返回Iterator的例子 2006-03-16 07:25 劍事
          連接con.close后
          next = rs.getString(1);
          是不能用的
          不知道你親手測試了沒  回復  更多評論
            

          # re: 一個取到ResultSet后返回Iterator的例子 2006-03-16 08:27 luckyrobbie
          connection關閉后,resultset是可以遍歷的
          statement關閉后,就不能遍歷了  回復  更多評論
            

          # re: 一個取到ResultSet后返回Iterator的例子 2006-03-16 08:54 boss_ch
          connection關閉后,resultset是可以遍歷的
          這是因為在使用連接池的情況下,Connection.close 是把連接返回給連接池了,但是沒有實際的關閉數據庫的網絡連接,所以,rs 是可以遍歷的,但是這時候 Conention 的狀態就不是剛創建連接時的狀態了。 

          實際上,上文所說的這種迭代模式,實在是一個壞做法。不要誤導初學者  回復  更多評論
            

          # re: 一個取到ResultSet后返回Iterator的例子 2006-03-16 09:24 luckyrobbie
          @boss_ch
          不用連接池啊
          為何你認為是不好的做法?  回復  更多評論
            

          主站蜘蛛池模板: 柯坪县| 玉林市| 迭部县| 新平| 前郭尔| 全南县| 天津市| 晋江市| 铜山县| 牡丹江市| 平乐县| 深圳市| 茌平县| 曲阳县| 曲沃县| 咸阳市| 个旧市| 驻马店市| 古浪县| 清丰县| 时尚| 利辛县| 东乌| 闵行区| 涿鹿县| 龙游县| 无棣县| 韶关市| 仁怀市| 丰原市| 探索| 富阳市| 谷城县| 百色市| 浠水县| 德清县| 兰溪市| 荃湾区| 枣强县| 天柱县| 漯河市|