ResultSet返回值问题 楼主自己已经找到原因了,你把Statement对象关闭了,那么他所有的ResultSet也会被关闭 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你不要返回ResultSet,你返回成list,就是把ResultSet里面的数据都放到list里面,这样就可以了 看你写的这个意思是不是不想要总复制粘贴这一套东西?因为rs必须在关闭之前把里面携带的值copy出去。你可以试试把一个model类的class传进去,然后用反射,将rs查出来的字段匹配model里面的属性名称将rs查出来的每条记录变成传入的class参数的一个对象,然后返回这类对象的集合。就像hibernate的HibernateTemplate里面的查询方法一样。 上面说了你错误;同时这样通用的方法很难写,一般都是采用ORM框架了;对于一个简单的查询,也还是可以尝试下,可以使用反射实现;比如:(没有测试,随意写的,还需你更多的完善)public static <T> List<T> selectData( String sql, Class<T> clz, //你的实体Bean类 HashMap<String, String> columnsToFieldsMap //数据库表列名到bean字段名的映射 ){ ResultSet rs = null; Statement st = null; Connection conn = ConnectionPool.getConnection(); List<T> results = new ArrayList<T>(); try { st = conn.createStatement(); rs = st.executeQuery(sql); BeanInfo beanInfo = Introspector.getBeanInfo(clz); PropertyDescriptor[] beanDesArr = beanInfo.getPropertyDescriptors(); ResultSetMetaData rsm = rs.getMetaData(); int size = rsm.getColumnCount(); while(rs.next()){ T obj = clz.newInstance(); for(int i = 1; i <= size; i++ ){ String columnName = rsm.getColumnName(i); for(PropertyDescriptor prop: beanDesArr){ if(prop.getName().equals(columnsToFieldsMap.get(columnName))){ prop.getWriteMethod().invoke(obj, rs.getObject(i)); } } } results.add(obj); } return results; } catch (Exception e) { e.printStackTrace(); }finally{ try{ if(st!=null){ st.close(); ConnectionPool.closeConnection(conn); } }catch(SQLException e){ e.printStackTrace(); } } return results; } 你不要返回ResultSet,你返回成list,就是把ResultSet里面的数据都放到list里面,这样就可以了有理,我怎么想了半天都没想到这个,郁闷 通过sh脚本的执行结果判断下一步动作 hdu 1065 我用C过了,但java过不了。。 System.out.write()的作用 java的ClassLoader的getResources方法怎么使用啊 为什么不能显示图像??(程序如下) jtable 删除问题 谁有JFRERCHART的文档发我份~~谢了 请大侠帮我看看这是什么错误 (JNI相关) 一条基础题目,还是不太懂底层的东西 关于类的问题?(新手请教) 有没有能实现固定次数定时任务的API啊 关于qq登录问题
因为rs必须在关闭之前把里面携带的值copy出去。
你可以试试把一个model类的class传进去,然后用反射,将rs查出来的字段匹配model里面的属性名称将rs查出来的每条记录变成传入的class参数的一个对象,然后返回这类对象的集合。
就像hibernate的HibernateTemplate里面的查询方法一样。
上面说了你错误;同时这样通用的方法很难写,一般都是采用ORM框架了;对于一个简单的查询,也还是可以尝试下,可以使用反射实现;比如:(没有测试,随意写的,还需你更多的完善)public static <T> List<T> selectData(
String sql,
Class<T> clz, //你的实体Bean类
HashMap<String, String> columnsToFieldsMap //数据库表列名到bean字段名的映射
){
ResultSet rs = null;
Statement st = null;
Connection conn = ConnectionPool.getConnection();
List<T> results = new ArrayList<T>();
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
BeanInfo beanInfo = Introspector.getBeanInfo(clz);
PropertyDescriptor[] beanDesArr = beanInfo.getPropertyDescriptors();
ResultSetMetaData rsm = rs.getMetaData();
int size = rsm.getColumnCount();
while(rs.next()){
T obj = clz.newInstance();
for(int i = 1; i <= size; i++ ){
String columnName = rsm.getColumnName(i);
for(PropertyDescriptor prop: beanDesArr){
if(prop.getName().equals(columnsToFieldsMap.get(columnName))){
prop.getWriteMethod().invoke(obj, rs.getObject(i));
}
}
}
results.add(obj);
}
return results;
} catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(st!=null){
st.close();
ConnectionPool.closeConnection(conn);
}
}catch(SQLException e){
e.printStackTrace();
}
}
return results;
}