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 馬嘉楠 閱讀(3294) 評論(5)  編輯  收藏 所屬分類: SoureCode

          FeedBack:
          # re: 保存ResultSet中的數據(Java Source Code)
          2006-08-27 07:13 | hiswing
          這樣一來,需要為每第表創建一個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 | 馬嘉楠
          呵呵,謝謝你的建議,我確實應該把文章放到新手區
          還在學習當中,積累經驗,文章免不了低級幼稚
          歡迎常來,給點意見^+^@不爽
            回復  更多評論
            
          # re: 保存ResultSet中的數據(Java Source Code)
          2006-08-27 14:59 | 馬嘉楠
          謝謝你的建議,我的做法確實失去了通用性
          用map也不錯,有沒有更好的呢?

          大家都來交流一下啊,讓我學習學習^+^@hiswing
            回復  更多評論
            
          # re: 保存ResultSet中的數據(Java Source Code)[未登錄]
          2009-05-13 23:04 | newMan
          樓主,幾年過去了,不知道你現在用什么方法實現了封裝。很是關注,希望能得到你的開源。  回復  更多評論
            
          主站蜘蛛池模板: 中江县| 泰州市| 井冈山市| 宁波市| 从江县| 井研县| 基隆市| 漾濞| 扎赉特旗| 大宁县| 抚顺县| 视频| 昭平县| 漠河县| 香港| 洛南县| 枣庄市| 天气| 甘南县| 交口县| 兰考县| 房山区| 正蓝旗| 新建县| 大冶市| 泾源县| 万年县| 罗山县| 平南县| 渑池县| 竹北市| 诸暨市| 庆云县| 宝应县| 来凤县| 盖州市| 红河县| 临颍县| 沧源| 彭州市| 灵石县|