牛仔褲的夏天

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

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            30 隨筆 :: 5 文章 :: 15 評(píng)論 :: 0 Trackbacks
          在Jdon.com里面看到的,覺(jué)得很值得借鑒
          原文: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中的用戶(hù)名加入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)存,又降低了偶合性,這是堪稱(chēng)中間件典型的示范。


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

          評(píng)論

          # re: 一個(gè)取到ResultSet后返回Iterator的例子 2006-03-15 18:00 劍事
          兩種方法各有優(yōu)點(diǎn)
          不過(guò)感覺(jué)也都一般
          第一個(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ò)客戶(hù)化的標(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)論
            

          主站蜘蛛池模板: 香港 | 萍乡市| 霍城县| 石渠县| 兰西县| 玛纳斯县| 溆浦县| 昌都县| 穆棱市| 嘉善县| 甘南县| 称多县| 阿坝县| 新乡市| 依兰县| 武威市| 昭平县| 上杭县| 山丹县| 阜南县| 都兰县| 昌乐县| 中宁县| 洛阳市| 历史| 云和县| 华池县| 阳泉市| 海宁市| 万山特区| 会宁县| 阜南县| 古丈县| 鄄城县| 巴青县| 龙门县| 吉水县| 左权县| 岐山县| 自贡市| 象山县|