源代码:
@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&¶ms.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 是一样的,望各位大神帮助