Java怎么将ResultSet结果集遍历到List中
导读:本文共3067.5字符,通常情况下阅读需要10分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 如何将ResultSet结果集遍历到List中今天在使用jstl标签展示查询结果时遇到一个小问题,即如何将ResultSet对象传递给前台页面。在默认情况中我们在使用数据库查询时publicListselectDataFromJdbc()throwsSQLException,ClassNotFoundException{Class.forName("... ...
目录
(为您整理了一些要点),点击可以直达。如何将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;}
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Java怎么将ResultSet结果集遍历到List中的详细内容,希望对您有所帮助,信息来源于网络。