Oo緣來(lái)是你oO


          posts - 120,comments - 125,trackbacks - 0

          ????????????????????????????? 保存ResultSet中的數(shù)據(jù)

          ??????????????????????????????????????????? 馬嘉楠??????? 2006.8.26

          當(dāng)我們?cè)诰帉?xiě)程序的時(shí)候,免不了要與數(shù)據(jù)庫(kù)打交道,相信ResultSet大家也并不陌生,從數(shù)據(jù)庫(kù)讀取的數(shù)據(jù)將會(huì)存入其中。

          操作結(jié)束關(guān)閉數(shù)據(jù)庫(kù)連接以及ResultSet,否則保持?jǐn)?shù)據(jù)庫(kù)的連接并直接對(duì)ResultSet中的數(shù)據(jù)進(jìn)行操作,會(huì)使效率低下,同時(shí)很可能出現(xiàn)錯(cuò)誤。

          此時(shí)我們就需要在關(guān)閉結(jié)果集ResultSet之前,保存其中我們需要的數(shù)據(jù)。

          我這里介紹的方法是將ResultSet中的數(shù)據(jù)存儲(chǔ)到一個(gè)VO對(duì)象當(dāng)中,ResultSet中每一個(gè)記錄對(duì)應(yīng)一個(gè)VO(VO就是數(shù)據(jù)庫(kù)中表的映射),之后再把這些VO存儲(chǔ)到ArrayList當(dāng)中,返回List方便其他方法處理。

          希望能給初學(xué)者以幫助,同時(shí)請(qǐng)高手不吝賜教,有沒(méi)有更好的處理方法,或者我的代碼由不合理的地方,也請(qǐng)您提出寶貴意見(jiàn)!共同學(xué)習(xí),共同進(jìn)步!

          代碼如下(我把實(shí)際代碼簡(jiǎn)化了一下,BlogJavaVO中的一些函數(shù)在這里沒(méi)有調(diào)用):

          protected ArrayList fetchMultiResults(ResultSet rs) throws SQLException {
          ??? ArrayList resultList = new ArrayList();

          ????while (rs.next()) {
          ??????? BlogJavaVO vo = new BlogJavaVO();
          ??????? populateData( vo, rs);
          ??????? resultList.add( vo );
          ??? }

          ??? return resultList;
          }
          ?
          ?protected void populateData(BlogJavaVO vo, ResultSet rs) throws SQLException {

          ????? vo.setUrl(DAOUtils.trimStr(rs.getString("url")));
          ????? vo.setName(DAOUtils.trimStr(rs.getString("name")));
          ????? vo.setDate(DAOUtils.getFormatedDate(rs.getDate("date"));

          ?}

          public class DAOUtils {

          ??????? ... ...

          ?/**
          ? * 提供刪除字符串前后的空格的功能
          ? * @param str
          ? * @return
          ? */
          ?public static String trimStr(String str) {
          ???? if (null == str)
          ???????? return "";
          ???? else
          ???????? return str.trim();
          ?}

          ??????? ... ...

          }

          VO是數(shù)據(jù)庫(kù)中表的映射
          Vo代碼如下:

          public class BlogJavaVO implements VO {

          ?private String url = "";?
          ?private String name = "";
          ?private String date = "";?//數(shù)據(jù)庫(kù)表BlogJava中的屬性設(shè)置為時(shí)間

          ?public BlogJavaVO() {}

          ?public BlogJavaVO( String purl, String pname, String pdate ) {
          ???? this.url = purl;
          ??? ?this.name = pname;
          ??? ?this.date = pdate;
          ?}

          ?public String getUrl() {
          ???? return url;
          ?}

          ?public String getName() {
          ?? ??return name;
          ?}

          ?public String getDate() {
          ??? ?return date;
          ?}

          ?public void setUrl(String purl) {
          ??? ?this.url = purl;
          ?}

          ?public void setName(String pname) {
          ??? ?this.name = pname;
          ?}

          ?public void setDate(String pdate) {
          ??? ?this.date = pdate;
          ?}

          ?public HashMap unloadToHashMap() {
          ??? ?HashMap hashMap = new HashMap();
          ?? ??hashMap.put("URL",this.url);
          ??? ?hashMap.put("NAME",this.name);
          ?? ??hashMap.put("DATE",this.date);
          ??? ?return hashMap;
          ?}

          ?public void loadFromHashMap(HashMap hashMap) {
          ???? if (hashMap != null) {
          ??????? ?this.url = (String) hashMap.get("URL");
          ??????? ?this.name = (String) hashMap.get("NAME");
          ??????? ?this.date = (String) hashMap.get("DATE");
          ??? }
          ?}

          ?public List getKeyFields() {
          ???? ArrayList arrayList = new ArrayList();
          ??? ?arrayList.add("url");
          ?? ??return arrayList;
          ?}

          ?public String getTableName() {
          ??? ?return "BlogJava";
          ?}

          }

          ?

          ?

          import java.io.Serializable;
          import java.util.*;
          /**
          ?* @Classname : VO
          ?* @Description : 公共數(shù)據(jù)對(duì)象接口,對(duì)于每個(gè)表值對(duì)象, 相應(yīng)的接口函數(shù)使用代碼生成器進(jìn)行生產(chǎn)
          ?* @Copyright
          ?* @Author :
          ?* @Create Date :
          ?*
          ?* @Last Modified :
          ?* @Modified by :
          ?* @Version : 1.0
          ?*/
          public interface VO extends Serializable {
          ?// 把數(shù)據(jù)導(dǎo)出到HashMap中, HashMap的關(guān)鍵字為對(duì)應(yīng)的表字段名字
          ?// 使用代碼生產(chǎn)器生產(chǎn)
          ?public HashMap unloadToHashMap();

          ?// 從HashMap中讀取數(shù)據(jù), 使用代碼生產(chǎn)器生成
          ?public void loadFromHashMap(HashMap map);

          ?// 獲取關(guān)鍵字列表, 使用代碼生產(chǎn)器生成
          ?public List getKeyFields();

          ?// 獲取對(duì)應(yīng)的表名, 使用代碼生產(chǎn)器生成
          ?String getTableName();
          }



          馬嘉楠
          jianan.ma@gmail.com

          posted on 2006-08-26 18:08 馬嘉楠 閱讀(3294) 評(píng)論(5)  編輯  收藏 所屬分類: SoureCode

          FeedBack:
          # re: 保存ResultSet中的數(shù)據(jù)(Java Source Code)
          2006-08-27 07:13 | hiswing
          這樣一來(lái),需要為每第表創(chuàng)建一個(gè)vo,為每一張表編寫(xiě)一個(gè)populateData。這樣做的好處是可以將數(shù)據(jù)庫(kù)操作封裝起來(lái),并在完成查詢后可以斷掉鏈接,但我認(rèn)為方法不是很好,重要的一點(diǎn)就是失去了通用性,比如在我的表改動(dòng)后不得不重寫(xiě)VO和populateData。增加刪除表后也必需重寫(xiě)VO和populateData。我的做法是將數(shù)保存在map中,這樣,即使增刪表或修改表,程序里不需要做任何改動(dòng)。當(dāng)然,唯一的問(wèn)題是map并不面向?qū)ο蟆?nbsp; 回復(fù)  更多評(píng)論
            
          # re: 保存ResultSet中的數(shù)據(jù)(Java Source Code)
          2006-08-27 10:21 | 不爽
          樓主,這種低級(jí)文章還是留給你自?shī)首詷?lè)去吧,別放到首頁(yè)來(lái)  回復(fù)  更多評(píng)論
            
          # re: 保存ResultSet中的數(shù)據(jù)(Java Source Code)
          2006-08-27 14:54 | 馬嘉楠
          呵呵,謝謝你的建議,我確實(shí)應(yīng)該把文章放到新手區(qū)
          還在學(xué)習(xí)當(dāng)中,積累經(jīng)驗(yàn),文章免不了低級(jí)幼稚
          歡迎常來(lái),給點(diǎn)意見(jiàn)^+^@不爽
            回復(fù)  更多評(píng)論
            
          # re: 保存ResultSet中的數(shù)據(jù)(Java Source Code)
          2006-08-27 14:59 | 馬嘉楠
          謝謝你的建議,我的做法確實(shí)失去了通用性
          用map也不錯(cuò),有沒(méi)有更好的呢?

          大家都來(lái)交流一下啊,讓我學(xué)習(xí)學(xué)習(xí)^+^@hiswing
            回復(fù)  更多評(píng)論
            
          # re: 保存ResultSet中的數(shù)據(jù)(Java Source Code)[未登錄](méi)
          2009-05-13 23:04 | newMan
          樓主,幾年過(guò)去了,不知道你現(xiàn)在用什么方法實(shí)現(xiàn)了封裝。很是關(guān)注,希望能得到你的開(kāi)源。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 峨眉山市| 新化县| 伊金霍洛旗| 宜兰县| 阜康市| 星子县| 紫金县| 连州市| 安远县| 德清县| 灵石县| 班玛县| 大悟县| 娄底市| 莲花县| 文安县| 赫章县| 自贡市| 黑山县| 贵州省| 新乡县| 大同县| 济宁市| 科技| 长垣县| 温泉县| 沁水县| 宁阳县| 遂溪县| 南木林县| 基隆市| 牡丹江市| 浠水县| 灵川县| 玉林市| 邵阳市| 岳西县| 长海县| 延边| 兴义市| 沂南县|