牛仔褲的夏天

          JAVA是藍(lán)色的- online

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            30 隨筆 :: 5 文章 :: 15 評(píng)論 :: 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;
          }
          上面是個(gè)我們采取返回Collection后最常用的方法,將ResultSet中的用戶名加入List再返回,顯然這很耗費(fèi)內(nèi)存。

          使用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");
                }

             }

          }

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


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

          評(píng)論

          # re: 一個(gè)取到ResultSet后返回Iterator的例子 2006-03-15 18:00 劍事
          兩種方法各有優(yōu)點(diǎn)
          不過(guò)感覺也都一般
          第一個(gè)占內(nèi)存,損失了內(nèi)存又沒(méi)方便多少
          第二個(gè)占連接,損失了連接又沒(méi)快多少

          http://www.aygfsteel.com/jfy3d/archive/2005/05/12/4185.html
          我實(shí)現(xiàn)的比第一個(gè)方便  回復(fù)  更多評(píng)論
            

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

          你的做法和我以前的做法一樣的,把一行放在一個(gè)HashMap中,然后把結(jié)果集封裝在一個(gè)Vector或者ArrayList中,然后在通過(guò)客戶化的標(biāo)簽進(jìn)行View的顯示,你可以看我這篇隨筆http://www.aygfsteel.com/luckyrobbie/archive/2006/03/10/34648.aspx  回復(fù)  更多評(píng)論
            

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

          # re: 一個(gè)取到ResultSet后返回Iterator的例子 2006-03-16 08:27 luckyrobbie
          connection關(guān)閉后,resultset是可以遍歷的
          statement關(guān)閉后,就不能遍歷了  回復(fù)  更多評(píng)論
            

          # re: 一個(gè)取到ResultSet后返回Iterator的例子 2006-03-16 08:54 boss_ch
          connection關(guān)閉后,resultset是可以遍歷的
          這是因?yàn)樵谑褂眠B接池的情況下,Connection.close 是把連接返回給連接池了,但是沒(méi)有實(shí)際的關(guān)閉數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)連接,所以,rs 是可以遍歷的,但是這時(shí)候 Conention 的狀態(tài)就不是剛創(chuàng)建連接時(shí)的狀態(tài)了。 

          實(shí)際上,上文所說(shuō)的這種迭代模式,實(shí)在是一個(gè)壞做法。不要誤導(dǎo)初學(xué)者  回復(fù)  更多評(píng)論
            

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

          主站蜘蛛池模板: 连平县| 平度市| 滁州市| 濉溪县| 铜川市| 淄博市| 康马县| 长汀县| 宁武县| 洛宁县| 甘洛县| 广灵县| 新津县| 泗洪县| 阳春市| 南安市| 巴林右旗| 沙湾县| 教育| 阿勒泰市| 新巴尔虎右旗| 吉木萨尔县| 扎囊县| 成安县| 天祝| 高清| 会同县| 和龙市| 武威市| 江西省| 梓潼县| 化州市| 滁州市| 永仁县| 明水县| 宁强县| 山西省| 开平市| 镇远县| 墨竹工卡县| 霍州市|