牛仔褲的夏天

          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
          不用連接池啊
          為何你認為是不好的做法?  回復  更多評論
            

          主站蜘蛛池模板: 牙克石市| 怀集县| 麦盖提县| 剑河县| 莱阳市| 泸水县| 邻水| 永兴县| 新干县| 奉贤区| 卓资县| 福泉市| 郯城县| 搜索| 巫山县| 广灵县| 陇南市| 鄂伦春自治旗| 垦利县| 元阳县| 洪泽县| 汝南县| 馆陶县| 丰镇市| 柳河县| 泰和县| 雷州市| 儋州市| 乌鲁木齐县| 那坡县| 赤水市| 旬邑县| 清新县| 乐山市| 即墨市| 博爱县| 康保县| 紫阳县| 顺昌县| 东乌珠穆沁旗| 甘谷县|