<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Oo緣來是你oO


    posts - 120,comments - 125,trackbacks - 0

    ????????????????????????????? 保存ResultSet中的數據

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

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

    操作結束關閉數據庫連接以及ResultSet,否則保持數據庫的連接并直接對ResultSet中的數據進行操作,會使效率低下,同時很可能出現錯誤。

    此時我們就需要在關閉結果集ResultSet之前,保存其中我們需要的數據。

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

    希望能給初學者以幫助,同時請高手不吝賜教,有沒有更好的處理方法,或者我的代碼由不合理的地方,也請您提出寶貴意見!共同學習,共同進步!

    代碼如下(我把實際代碼簡化了一下,BlogJavaVO中的一些函數在這里沒有調用):

    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是數據庫中表的映射
    Vo代碼如下:

    public class BlogJavaVO implements VO {

    ?private String url = "";?
    ?private String name = "";
    ?private String date = "";?//數據庫表BlogJava中的屬性設置為時間

    ?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 : 公共數據對象接口,對于每個表值對象, 相應的接口函數使用代碼生成器進行生產
    ?* @Copyright
    ?* @Author :
    ?* @Create Date :
    ?*
    ?* @Last Modified :
    ?* @Modified by :
    ?* @Version : 1.0
    ?*/
    public interface VO extends Serializable {
    ?// 把數據導出到HashMap中, HashMap的關鍵字為對應的表字段名字
    ?// 使用代碼生產器生產
    ?public HashMap unloadToHashMap();

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

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

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



    馬嘉楠
    jianan.ma@gmail.com

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

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

    大家都來交流一下啊,讓我學習學習^+^@hiswing
      回復  更多評論
      
    # re: 保存ResultSet中的數據(Java Source Code)[未登錄]
    2009-05-13 23:04 | newMan
    樓主,幾年過去了,不知道你現在用什么方法實現了封裝。很是關注,希望能得到你的開源。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲AV无码精品色午夜果冻不卡 | 亚洲欧洲另类春色校园小说| 国产在线精品一区免费香蕉 | 亚洲精品国自产拍在线观看| 国产精品亚洲专区无码唯爱网| 在线播放免费播放av片| 亚洲一线产区二线产区区| 免费理论片51人人看电影| 国产成人亚洲综合a∨| 亚洲国产精品无码久久久久久曰| 日韩毛片在线免费观看| 久久久久亚洲av毛片大| 国产拍拍拍无码视频免费| 亚洲丝袜美腿视频| 免费看韩国黄a片在线观看| 亚洲无码一区二区三区| 亚洲不卡无码av中文字幕| 黄视频在线观看免费| 亚洲高清在线播放| 100000免费啪啪18免进| 亚洲av纯肉无码精品动漫| 国产精品亚洲美女久久久 | 亚洲精品又粗又大又爽A片| 卡一卡二卡三在线入口免费| 一进一出60分钟免费视频| 亚洲国产精品久久久久网站| 91视频国产免费| 边摸边脱吃奶边高潮视频免费| 亚洲国产另类久久久精品| 亚洲美女视频免费| 亚洲AV永久无码精品一福利| 国产性爱在线观看亚洲黄色一级片 | 16女性下面扒开无遮挡免费| 亚洲精品第一国产综合野| 国产免费怕怕免费视频观看| 男人都懂www深夜免费网站| 亚洲熟妇无码一区二区三区导航| 国产亚洲精品影视在线产品 | 国产免费一区二区三区免费视频 | 亚洲日本中文字幕天堂网| 日本在线看片免费人成视频1000|