亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

查詢數據庫后返回Iterator

2019-11-18 11:28:44
字體:
來源:轉載
供稿:網友

既然我們把數據庫訪問封裝起來了,那么假如查詢數據庫返回的是一系列結果,比如我們從數據庫中得到所有人的用戶名,然后在jsp頁面顯示出來。

這里就有一個普遍疑問,我這個javabean是返回ResultSet到Jsp中還是Collection?

我曾經有段時間圖省事,直接返回ResultSet,然后在我的jsp頁面中是大量的ResultSet遍歷。這其實還是將數據層和顯示層混淆在一起。在EJB CMP中,返回的是Collection,這樣偶合性降低,不用在修改數據庫結構后,一直修改程序到前臺Jsp頁面,這和以前的php asp開發方式沒兩樣。

但是返回Collection效率不是很高,因為意味著在內存中要開辟一個內存存放所有的結果。

我看了http://builder.com.com/article.jHtml?id=u00220020814R4B01.htm這篇文章后,覺得啟發很大,返回Iterator就可以了。

Iterator也是個模式,在Jive中大量使用了Iterator,我以前很希奇,為什么他沒事自己寫個Iterator,現在知道原因了,這樣節省內存,而且效率高。

看下面比較:

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

這里返回的是一個內部類,其實你可以象Jive那樣,專門做個Iterator類,這樣,這里寫得就不那么難看,你自己定義的Iterator和Collection中的Iterator沒有任何關系,自己定義了三個方法 hasNext(); next(); remove();這樣看上去和Collection的Iterator是一樣的。

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

既然返回iterator這么好,有人經常用到一個簡單的返回Iterator方法:
public Iterator getUsers() {
ResultSet rs = userDbQuery();
List list = new ArrayList()
while (rs.next()) {
list.add(rs.getString(1));
}
return list.iterator();
}

這其實和直接返回list沒區別,還是浪費內存。

就此篇文章引起爭論:

1.關閉數據庫連接rs是否還能使用?

http://dev.csdn.net/develop/article/17/17705.shtm

如下:

在Connection上調用close方法會關閉Statement和ResultSet嗎?

級聯的關閉這聽起來似乎很有道理,而且在很多地方這樣做也是正確的,通常這樣寫
Connection con = getConnection();//getConnection is your method
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
……
///rs.close();
///ps.close();
con.close();  // NO!
這樣做的問題在于Connection是個接口,它的close實現可能是多種多樣的。在普通情況下,你用DriverManager.getConnection()得到一個Connection實例,調用它的close方法會關閉Statement和ResultSet。但是在很多時候,你需要使用數據庫連接池,在連接池中的得到的Connection上調用close方法的時候,Connection可能并沒有被釋放,而是回到了連接池中。它以后可能被其它代碼取出來用。假如沒有釋放Statement和ResultSet,那么在Connection上沒有關閉的Statement和ResultSet可能會越來越多,那么……
相反,我看到過這樣的說法,有人把Connection關閉了,卻繼續使用ResultSet,認為這樣是可以的,引發了激烈的討論,到底是怎么回事就不用我多說了吧。(作者意思是:rs的資源沒有釋放,還用的是連接池中的conn)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产不卡一区二区在线播放| 亚洲va国产va天堂va久久| 国产精品人人做人人爽| 美女撒尿一区二区三区| 欧美日本高清一区| 色99之美女主播在线视频| 大伊人狠狠躁夜夜躁av一区| 国产亚洲美女久久| 精品毛片三在线观看| 久久久视频精品| 欧美精品免费在线| 国产精品成人久久久久| 国内精品一区二区三区四区| 国产成人一区二区三区电影| 国产精品视频久| 欧美超级免费视 在线| 日韩电影第一页| 欧美另类69精品久久久久9999| 欧美亚州一区二区三区| 九九热视频这里只有精品| 亚洲一级片在线看| 中国日韩欧美久久久久久久久| 亚洲国产黄色片| 成人羞羞国产免费| 久久久精品2019中文字幕神马| 久久久亚洲国产| 日韩网站免费观看| 日韩av电影院| 日韩在线视频线视频免费网站| 欧美激情视频在线观看| 欧美日韩精品在线播放| 精品美女久久久久久免费| 久久91超碰青草是什么| 国产精品久久久久久搜索| 欧美激情一区二区久久久| 8090理伦午夜在线电影| 亚洲天堂免费在线| 欧美大片第1页| 亚洲欧美精品在线| 亚洲天堂2020| 欧美国产视频一区二区| 在线播放国产精品| 亚洲天堂av在线播放| 亚洲精品久久久久| 精品国产一区久久久| 中文在线资源观看视频网站免费不卡| 国产一区二区三区高清在线观看| 久久精品精品电影网| 亚洲成人久久久久| 国产欧美中文字幕| 亚洲xxxx做受欧美| 欧美日韩国产区| 欧美国产日韩在线| 欧日韩不卡在线视频| 成人黄色生活片| 欧美成人合集magnet| 久久久久国色av免费观看性色| 国产精品稀缺呦系列在线| 一区二区在线免费视频| 日韩免费观看av| 精品久久久中文| 国产精品999999| 国产精品91在线观看| 欧美日韩在线影院| 日韩色av导航| 亚洲精品一二区| 欧美精品www| 91高清在线免费观看| 亚洲欧美日韩精品| 色香阁99久久精品久久久| 亚洲人成人99网站| 成人免费看片视频| 在线视频日本亚洲性| 国产精品h片在线播放| 精品二区三区线观看| 国产精品91久久久久久| 欧美日韩亚洲一区二区| 97久久精品人人澡人人爽缅北| 精品中文字幕久久久久久| 亚洲aⅴ日韩av电影在线观看| 久久久亚洲精品视频| 国产精品女视频| 国产欧美精品一区二区| 美女国内精品自产拍在线播放| 国产精品福利无圣光在线一区| 在线亚洲国产精品网| 欧美日韩性视频在线| 日韩一区二区三区在线播放| 国产精品精品视频| 91tv亚洲精品香蕉国产一区7ujn| 国产精品av在线| 国内精品久久久久久影视8| 69久久夜色精品国产69乱青草| 92版电视剧仙鹤神针在线观看| 91网在线免费观看| 91免费的视频在线播放| 成年人精品视频| 久久99热这里只有精品国产| 精品久久久久久电影| 亚洲激情视频网| 91精品国产色综合久久不卡98| 97精品国产91久久久久久| 在线播放日韩欧美| 亚洲国产又黄又爽女人高潮的| 国模吧一区二区三区| 中文字幕亚洲自拍| 日韩精品中文字幕在线播放| 国产精品中文字幕在线观看| 欧美区在线播放| 日韩久久精品成人| 欧美高清性猛交| 国语自产精品视频在线看一大j8| 色青青草原桃花久久综合| 欧美日韩国产精品一区| 色狠狠久久aa北条麻妃| 亚洲欧美另类在线观看| 欧美日韩中文字幕在线视频| 欧亚精品中文字幕| 久久综合久久美利坚合众国| 亚洲欧美综合图区| 国产一区二区三区在线播放免费观看| 日本精品久久久久久久| 成人高h视频在线| 国产mv免费观看入口亚洲| 全球成人中文在线| 亚洲精品一区二区三区不| 97福利一区二区| 亚洲国产成人一区| 国产精品美女主播在线观看纯欲| 国产精品视频内| 亚洲一区二区三区777| 日本中文字幕成人| 国产有码在线一区二区视频| 日av在线播放中文不卡| 久热爱精品视频线路一| 91精品国产91久久| 久久久久久久久久亚洲| 国产精品毛片a∨一区二区三区|国| 国产精品视频自在线| 欧美黄色片免费观看| 国产精品av网站| 91中文精品字幕在线视频| 久久999免费视频| 欧美美最猛性xxxxxx| 欧美第一黄网免费网站| 日本欧美一级片| 欧美成人h版在线观看| 欧美日韩激情视频8区| 国产精品视频播放| 国产视频精品va久久久久久| 91精品综合久久久久久五月天| 亚洲成在人线av| 2024亚洲男人天堂| 久久夜色精品亚洲噜噜国产mv| 亚洲免费人成在线视频观看| 国产xxx69麻豆国语对白| 欧美激情视频网站| 国产精品999999| 亚洲色图日韩av| 九九热最新视频//这里只有精品| 欧美激情精品久久久久久变态| 欧美成人午夜剧场免费观看| 久久久久久久久久久免费| 国产精品久久久久久久久男|