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 马嘉楠 阅读(3284) 评论(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
楼主,几年过去了,不知道你现在用什么方法实现了封装。很是关注,希望能得到你的开源。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: