Java怎么将ResultSet结果集遍历到List中(java,list,resultset,开发技术)

时间:2024-05-04 07:07:00 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

如何将ResultSet结果集遍历到List中

今天在使用jstl标签展示查询结果时遇到一个小问题,即如何将ResultSet对象传递给前台页面。

在默认情况中我们在使用数据库查询时

publicListselectDataFromJdbc()throwsSQLException,ClassNotFoundException{Class.forName("oracle.jdbc.driver.OracleDriver");//加载MYSQLJDBC驱动程序Stringurl="jdbc:oracle:thin:@192.168.x.222:1521:orcl";Connectionconn=DriverManager.getConnection(url,"username","passwd");Statementstat=conn.createStatement();Stringsql="selectu.user_id,u.account,u.namefrom"+"sys_useru";//格式:Stringsql="select*from"+TableNamewhere1=1;ResultSetrs=stat.executeQuery(sql);Listlist=convertList(rs);stat.close();conn.close();returnlist;}

在正常情况下,我们是不能直接将 ResultSet 记录集 rs 直接传递给前台的,因为 ResultSet 不仅无法进行循环遍历 (即只能每行遍历,从0至end ,执行一次),而且在实际应用中,它还必须被关闭。

当关闭后,rs为null ,结果不再存在。

在这时我们就需要将 ResultSet 对象进行遍历到 list 中,代码如下:

privatestaticListconvertList(ResultSetrs)throwsSQLException{Listlist=newArrayList();ResultSetMetaDatamd=rs.getMetaData();//获取键名intcolumnCount=md.getColumnCount();//获取行的数量while(rs.next()){MaprowData=newHashMap();//声明Mapfor(inti=1;i<=columnCount;i++){rowData.put(md.getColumnName(i),rs.getObject(i));//获取键名及值}list.add(rowData);}returnlist;}

查看以上代码,可以看出我们使用 Map 与 MetaDate 使 ResultSet 储存到 list 中的,因为 list 只能存放元素的索引而不能存放元素的值,所以我们要用到 Map 。

使用这种方法的好处就是可以创建高复用性的代码 ,因为我们不需要每次通过指定键名取值。

实际工作间接,与君共勉。

代码

packagecom.example.demo.test;importjava.sql.*;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/***JAVA将ResultSet结果集遍历到List中*@authorgblfy*@date2020-10-14*/publicclassgetColumnName{publicstaticvoidmain(String[]args)throwsSQLException,ClassNotFoundException{getColumnNamegetColumnName=newgetColumnName();Listlist=getColumnName.selectDataFromJdbc();for(Objecto:list){System.out.println("ddd:"+o);}}publicListselectDataFromJdbc()throwsSQLException,ClassNotFoundException{Class.forName("oracle.jdbc.driver.OracleDriver");//加载MYSQLJDBC驱动程序Stringurl="jdbc:oracle:thin:@10.5.6.222:1521:lisdb";Connectionconn=DriverManager.getConnection(url,"fisknow","fisknow");Statementstat=conn.createStatement();Stringsql="selectu.user_id,u.account,u.namefrom"+"sys_useru";//格式:Stringsql="select*from"+TableNamewhere1=1;ResultSetrs=stat.executeQuery(sql);Listlist=convertList(rs);stat.close();conn.close();returnlist;}privatestaticListconvertList(ResultSetrs)throwsSQLException{Listlist=newArrayList();ResultSetMetaDatamd=rs.getMetaData();//获取键名intcolumnCount=md.getColumnCount();//获取行的数量while(rs.next()){MaprowData=newHashMap();//声明Mapfor(inti=1;i<=columnCount;i++){rowData.put(md.getColumnName(i),rs.getObject(i));//获取键名及值}list.add(rowData);}returnlist;}}

使用泛型封装结果集ResultSet遍历成List集合

public<T>List<T>findModelListBySqlAndParam(Stringsql,List<Object>param,Tt)throwsException{//定义一个集合来存放需要转成的对象集合List<T>list=newArrayList<T>();//获取当前类Class<?>c=t.getClass();//泛型的反射机制(?问号可写可不写)java.lang.reflect//遍历结果集,封装成外界用户所需要的对象集合//1>获取结果集ResultSetrs=executeQuery(sql,param);//2>开始遍历while(rs.next()){//初始化对象@SuppressWarnings("unchecked")Tobj=(T)c.newInstance();//获取当前类一共多少个属性啊Field[]fields=c.getDeclaredFields();for(Fieldf:fields){//获取当前属性的属性名子Stringfname=f.getName();//获取当前的属性的类型(简称)java.lang.StringStringtype=f.getType().getSimpleName();//*****************取出来当前属性对应的数据库的值了****************//在此方法名中要求类的属性名和数据库的字段名相同Objectvalue=null;if(type.equalsIgnoreCase("string")){value=rs.getString(fname);}elseif(type.equalsIgnoreCase("int")){value=rs.getInt(fname);}elseif(type.equalsIgnoreCase("Integer")){value=rs.getInt(fname);}elseif(type.equalsIgnoreCase("Double")){value=rs.getDouble(fname);}elseif(type.equalsIgnoreCase("Float")){value=rs.getFloat(fname);}elseif(type.equalsIgnoreCase("date")){value=rs.getDate(fname);}elseif(type.equalsIgnoreCase("long")){value=rs.getLong(fname);}//*****************将取出来当前属性的值设置给当前对象obj****************//1>获取当前对象的所有set方法,并找到当前取出来的属性对应的set方法Method[]methods=c.getDeclaredMethods();//获取所有的方法for(Methodm:methods){//获取当前方法名StringmethodName=m.getName();//判断是不是当前属性if(methodName.equalsIgnoreCase("set"+fname)){//执行该方法m.invoke(obj,value);}}}list.add(obj);}returnlist;}

Java怎么将ResultSet结果集遍历到List中

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Java怎么将ResultSet结果集遍历到List中的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Ruoyi从mysql怎么切换到postgresql下一篇:

12 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18