请大神帮我分析一下,JAVA ResultSet while 循环 少数据问题.

源代码:

@Autowired
protected LocalContainerEntityManagerFactoryBean factoryBean;
@PersistenceContext
protected EntityManager entityManager;

public List<Map<String, Object>> findMapList(String sql,Object[] vals,int[] pageParams ){
	Connection con=null;
	PreparedStatement pre=null;
	ResultSet res=null;
	try {
		con=factoryBean.getDataSource().getConnection();
		pre=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
		if(vals!=null){
			int index=1;
			for (Object val : vals) {
				pre.setObject(index++, val);
			}
		}
		if(pageParams!=null){
			pre.setMaxRows(pageParams[0]+pageParams[1]-1);
			res=pre.executeQuery();
			res.first();  
			res.relative(pageParams[0]-2);
		}else{
			res=pre.executeQuery();
		}
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return 	getListFromResultSet(res,con);
}


public List<Map<String, Object>> getListFromResultSet(ResultSet res,Connection con){
	List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
	ResultSetMetaData rsmd=null;
	int columnCount=0;
	try {
		rsmd = res.getMetaData();
		columnCount = rsmd.getColumnCount();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	try {
		while (res.next()) {
			Map<String, Object> map=new HashMap<String, Object>();
			for (int i = 1; i <= columnCount; i++) {
				map.put(rsmd.getColumnLabel(i).toLowerCase(), res.getObject(i));
			}
			list.add(map);
		}
	} catch (SQLException e) {
		e.printStackTrace();
	}finally{
		try {
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	return list;
}

public Query setParameters(Query query,Map<String, Object> params){
	if(params!=null&&params.size()>0){
    	 Set<String> sets=params.keySet();
	     for (String key : sets) {
			query.setParameter(key, params.get(key));
		}
     }
	return query;
}

问题: 为什么获取数据总是少一条呢? ResultSet while (res.next()) 问题我也注意到了啊,代码获取到的数据总比 数据库中SQL 查到的少一条,确定sql 是一样的,望各位大神帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值