Oo緣來是你oO


          posts - 120,comments - 125,trackbacks - 0

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

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

          當(dāng)我們在編寫程序的時候,免不了要與數(shù)據(jù)庫打交道,相信ResultSet大家也并不陌生,從數(shù)據(jù)庫讀取的數(shù)據(jù)將會存入其中。

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

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

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

          希望能給初學(xué)者以幫助,同時請高手不吝賜教,有沒有更好的處理方法,或者我的代碼由不合理的地方,也請您提出寶貴意見!共同學(xué)習(xí),共同進(jì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è)置為時間

          ?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ù)對象接口,對于每個表值對象, 相應(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)鍵字為對應(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();

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



          馬嘉楠
          jianan.ma@gmail.com

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

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

          大家都來交流一下啊,讓我學(xué)習(xí)學(xué)習(xí)^+^@hiswing
            回復(fù)  更多評論
            
          # re: 保存ResultSet中的數(shù)據(jù)(Java Source Code)[未登錄]
          2009-05-13 23:04 | newMan
          樓主,幾年過去了,不知道你現(xiàn)在用什么方法實現(xiàn)了封裝。很是關(guān)注,希望能得到你的開源。  回復(fù)  更多評論
            
          主站蜘蛛池模板: 凌源市| 五常市| 永和县| 临海市| 油尖旺区| 定陶县| 四会市| 毕节市| 江川县| 喜德县| 洛南县| 平定县| 泊头市| 东乌珠穆沁旗| 高碑店市| 突泉县| 钟祥市| 固阳县| 巴青县| 山西省| 临泽县| 遂昌县| 绵阳市| 元江| 汶上县| 桐梓县| 高碑店市| 呼玛县| 定结县| 海晏县| 临汾市| 绥中县| 鄂尔多斯市| 阆中市| 正宁县| 手机| 奎屯市| 平谷区| 临泽县| 洪湖市| 祁门县|