Oo緣來是你oO


          posts - 120,comments - 125,trackbacks - 0

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

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

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

          操作結(jié)束關(guān)閉數(shù)據(jù)庫連接以及ResultSet,否則保持?jǐn)?shù)據(jù)庫的連接并直接對(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ù)庫中表的映射),之后再把這些VO存儲(chǔ)到ArrayList當(dāng)中,返回List方便其他方法處理。

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

          代碼如下(我把實(shí)際代碼簡(jiǎn)化了一下,BlogJavaVO中的一些函數(shù)在這里沒有調(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ù)庫中表的映射
          Vo代碼如下:

          public class BlogJavaVO implements VO {

          ?private String url = "";?
          ?private String name = "";
          ?private String date = "";?//數(shù)據(jù)庫表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 馬嘉楠 閱讀(3295) 評(píng)論(5)  編輯  收藏 所屬分類: SoureCode

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

          大家都來交流一下啊,讓我學(xué)習(xí)學(xué)習(xí)^+^@hiswing
            回復(fù)  更多評(píng)論
            
          # re: 保存ResultSet中的數(shù)據(jù)(Java Source Code)[未登錄]
          2009-05-13 23:04 | newMan
          樓主,幾年過去了,不知道你現(xiàn)在用什么方法實(shí)現(xiàn)了封裝。很是關(guān)注,希望能得到你的開源。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 开封市| 湛江市| 建宁县| 沅陵县| 石棉县| 永济市| 广灵县| 银川市| 日喀则市| 华宁县| 济阳县| 河津市| 黄平县| 诸暨市| 城口县| 闵行区| 犍为县| 化德县| 新田县| 静海县| 胶州市| 永兴县| 富顺县| 聂荣县| 佛学| 乐东| 朝阳县| 高淳县| 南安市| 桐乡市| 潜江市| 武汉市| 日喀则市| 永靖县| 比如县| 安阳县| 静安区| 台东市| 安化县| 嫩江县| 抚顺县|