zoukankan      html  css  js  c++  java
  • JdbcTemplate查询数据中两种处理结果集方法的简单比较

    	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中。

  • 相关阅读:
    [Usaco2013 DEC] Vacation Planning
    [Usaco2015 DEC] Counting Haybales
    [ZJOI 2008] 泡泡堂BNB
    [USACO17FEB]Why Did the Cow Cross the Road II
    [Usaco2018 Feb] New Barns
    [HNOI 2006] 鬼谷子的钱袋
    [Usaco2017 Feb]Why Did the Cow Cross the RoadII
    初涉数论分块
    「在更」初涉历史最值线段树
    初涉DSU on tree
  • 原文地址:https://www.cnblogs.com/vitosun/p/4932337.html
Copyright © 2011-2022 走看看