首页 > 数据库技术 > 详细

JdbcTemplate查询数据中两种处理结果集方法的简单比较

时间:2015-11-03 12:03:28      阅读:259      评论:0      收藏:0      [点我收藏+]
	public List<Cat> listCats(){
		//多条数据查询
		String sql = "select id, name, description, mother_id, createDate from tbl_cat";
		
		/*//方法1、使用RowMapper<Cat>处理结果集
		return jdbcTemplate.query(sql, new RowMapper<Cat>(){

			@Override
			public Cat mapRow(ResultSet rs, int index) throws SQLException {
				// TODO Auto-generated method stub
				Cat cat = new Cat();
				cat.setId(rs.getInt("id"));
				cat.setMother_id(rs.getInt("mother_id"));
				cat.setDescription(rs.getString("description"));
				cat.setCreateDate(rs.getDate("creatDate"));
				return cat;
			}
			
		});*/
		//方法2、使用RowCallbackHandler()
		final List<Cat> catList = new ArrayList<Cat>();//在内部匿名类中使用
		jdbcTemplate.query(sql, new RowCallbackHandler() {
			
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				// TODO Auto-generated method stub
				Cat cat = new Cat();
				cat.setId(rs.getInt("id"));
				cat.setMother_id(rs.getInt("mother_id"));
				cat.setDescription(rs.getString("description"));
				cat.setCreateDate(rs.getDate("creatDate"));
				//####do something
				catList.add(cat);
			}
		});
		return catList;
		
		
		
	}

  两种方法在功能上并没有太大的区别,都是用于定义结果集行的读取逻辑,将ResultSet中的数据映射到对象或者list中。

     区别是,使用RowMapper,将直接得到一个List,而RowCallbackHandler并不直接返回数据,而是在processRow()接口方法中自己对得到的数据进行处理。

      当处理大结果集时,如果使用RowMapper,结果集中所有数据最终都会映射到List中,占用大量的JVM内存,甚至直接引发OutOfMemroyException异常。这时应该使用RowCallbackHandler接口在processRow()接口方法中处理得到的数据(在//####do something 处),而不是将其添加到List中。

JdbcTemplate查询数据中两种处理结果集方法的简单比较

原文:http://www.cnblogs.com/vitosun/p/4932337.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!