我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

今天小编给大家分享一下Java怎么将ResultSet结果集遍历到List中的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

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

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

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

public List selectDataFromJdbc() throws SQLException, ClassNotFoundException {        Class.forName("oracle.jdbc.driver.OracleDriver"); //加载MYSQL JDBC驱动程序        String url = "jdbc:oracle:thin:@192.168.x.222:1521:orcl";        Connection conn = DriverManager.getConnection(url, "username", "passwd");        Statement stat = conn.createStatement();        String sql = "select u.user_id ,u.account,u.name from " + "sys_user u";         // 格式: String sql = "select * from " + TableName where 1=1;        ResultSet rs = stat.executeQuery(sql);        List list = convertList(rs);        stat.close();        conn.close();        return list;    }

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

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

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

private static List convertList(ResultSet rs) throws SQLException {        List list = new ArrayList();        ResultSetMetaData md = rs.getMetaData();//获取键名        int columnCount = md.getColumnCount();//获取行的数量        while (rs.next()) {            Map rowData = new HashMap();//声明Map            for (int i = 1; i <= columnCount; i++) {                rowData.put(md.getColumnName(i), rs.getObject(i));//获取键名及值            }            list.add(rowData);        }        return list;    }

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

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

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

代码

package com.example.demo.test;import java.sql.*;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class getColumnName {    public static void main(String[] args) throws SQLException, ClassNotFoundException {        getColumnName getColumnName = new getColumnName();        List list = getColumnName.selectDataFromJdbc();        for (Object o : list) {            System.out.println("ddd:" + o);        }    }    public List selectDataFromJdbc() throws SQLException, ClassNotFoundException {        Class.forName("oracle.jdbc.driver.OracleDriver"); //加载MYSQL JDBC驱动程序        String url = "jdbc:oracle:thin:@10.5.6.222:1521:lisdb";        Connection conn = DriverManager.getConnection(url, "fisknow", "fisknow");        Statement stat = conn.createStatement();        String sql = "select u.user_id ,u.account,u.name from " + "sys_user u";        // 格式: String sql = "select * from " + TableName where 1=1;        ResultSet rs = stat.executeQuery(sql);        List list = convertList(rs);        stat.close();        conn.close();        return list;    }    private static List convertList(ResultSet rs) throws SQLException {        List list = new ArrayList();        ResultSetMetaData md = rs.getMetaData();//获取键名        int columnCount = md.getColumnCount();//获取行的数量        while (rs.next()) {            Map rowData = new HashMap();//声明Map            for (int i = 1; i <= columnCount; i++) {                rowData.put(md.getColumnName(i), rs.getObject(i));//获取键名及值            }            list.add(rowData);        }        return list;    }}

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

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

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

以上就是“Java怎么将ResultSet结果集遍历到List中”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

今天小编给大家分享一下Java怎么将ResultSet结果集遍历到List中的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。如
2023-07-05

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

这篇文章主要介绍了Java如何将ResultSet结果集遍历到List中问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-28

mysql怎么循环遍历结果集

在MySQL中,可以使用游标(cursor)来循环遍历结果集。下面是一个示例代码,展示了如何使用游标来循环遍历结果集:```DELIMITER //CREATE PROCEDURE iterate_result_set()BEGINDECL
2023-09-11

怎么使用mysql游标遍历结果集

使用MySQL游标遍历结果集可以按照以下步骤进行:声明一个游标变量,并将查询结果赋值给游标变量。使用DECLARE语句声明游标变量,指定游标的名称、查询语句和其他参数(例如游标类型)。使用OPEN语句打开游标,将结果集关联到游标变量。
怎么使用mysql游标遍历结果集
2024-02-29

MySQL中怎么通过游标与LOOP循环遍历结果集

在MySQL中,可以使用游标和LOOP循环来遍历结果集。以下是一个示例:DELIMITER //DROP PROCEDURE IF EXISTS iterate_results//CREATE PROCEDURE iterate_resu
MySQL中怎么通过游标与LOOP循环遍历结果集
2024-04-30

sql怎么将多个结果集合并到一行

在SQL中,可以使用`GROUP_CONCAT`函数将多个结果集合并到一行。假设我们有一个名为`employees`的表,包含以下数据:| id | name | department ||----|--------|---------
2023-10-12

java中的集合元素怎么利用foreach进行遍历

本篇文章给大家分享的是有关java中的集合元素怎么利用foreach进行遍历,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。代码示例import java.util.*; pu
2023-05-31

Jmeter怎么将每次测试的结果保存到文件中

本文小编为大家详细介绍“Jmeter怎么将每次测试的结果保存到文件中”,内容详细,步骤清晰,细节处理妥当,希望这篇“Jmeter怎么将每次测试的结果保存到文件中”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在测试
2023-07-05

mysql中怎么用一条sql将多条无法进行关联的sql封装到一个结果集中

这篇文章主要讲解了“mysql中怎么用一条sql将多条无法进行关联的sql封装到一个结果集中”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中怎么用一条sql将多条无法进行关联的sq
2023-03-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录