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

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

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

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;
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

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

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

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

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

下载Word文档

猜你喜欢

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

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

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

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

详解Java如何判断ResultSet结果集是否为空

ResultSet表示select语句的查询结果集。这篇文章主要为大家详细介绍了Java如何判断ResultSet结果集是否为空,感兴趣的可以了解一下
2023-02-10

spark中如何将所有结果汇集到一个文件

这篇文章主要介绍了spark中如何将所有结果汇集到一个文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。写文件时,将所有结果汇集到一个文件repartition(1)感谢你能
2023-06-26

如何使用Java的Iterator接口遍历集合元素?(在Java中,如何通过Iterator接口遍历集合中的元素?)

在Java中,使用Iterator接口遍历集合元素的方法如下:获得Iterator对象:集合的iterator()方法返回一个Iterator对象。迭代元素:hasNext()方法检查是否有元素;next()方法返回下一个元素。重复步骤2和3:循环迭代元素,直至hasNext()返回false。Iterator的好处:通用性:适用于不同集合类型。类型安全:确保访问的元素类型正确。可修改性:允许在遍历中修改元素(谨慎使用)。避免并发修改异常:防止因并发修改而发生的错误。注意事项:并发修改:遍历时修改集合可能
如何使用Java的Iterator接口遍历集合元素?(在Java中,如何通过Iterator接口遍历集合中的元素?)
2024-04-02

Java中如何高效遍历大数据量集合?(在Java中,如何实现对大数据量集合的高效遍历?)

Java中遍历大数据量集合的优化方法:选择合适的数据结构(线性/非线性)并行遍历(多线程)惰性遍历(按需处理)提前分配内存使用原生循环深度/广度优先遍历(针对树/图)最佳实践:避免迭代器缓存集合预先计算值优化内存管理剖析性能瓶颈
Java中如何高效遍历大数据量集合?(在Java中,如何实现对大数据量集合的高效遍历?)
2024-04-02

Java中遍历Set集合时如何保证元素顺序?(在Java中,遍历Set集合时如何确保元素的顺序?)

在Java中遍历Set集合时,可以使用以下方法保证元素顺序:使用有序Set实现(如LinkedHashSet)重写Comparator定义排序规则借助迭代器手动控制遍历和重新排序使用Java8StreamAPI的sorted()方法排序元素
Java中遍历Set集合时如何保证元素顺序?(在Java中,遍历Set集合时如何确保元素的顺序?)
2024-04-02

java中如何遍历ArrayList集合中的元素并输出

问题:假设集合ArrayList中存储的元素是整形数字1~5,遍历每个元素,将每个元素顺序输出。在线学习视频推荐:java教学视频示例如下:package work10;import java.util.ArrayList;import java.util.I
java中如何遍历ArrayList集合中的元素并输出
2019-08-23

Java中的foreach循环是如何实现集合遍历的?(Java中的foreach循环机制是如何用于遍历集合的?)

Java中的foreach循环通过Iterable接口和Iterator对象进行集合遍历。它通过自动生成隐式迭代器简化了代码,并通过强制类型兼容性提高了类型安全性。foreach循环针对只读迭代、不可控遍历顺序和无法访问索引等限制,提供了简洁、高效且类型安全的解决方案。
Java中的foreach循环是如何实现集合遍历的?(Java中的foreach循环机制是如何用于遍历集合的?)
2024-04-02

如何在Java中使用Lambda表达式简化集合遍历?(Java中如何利用Lambda表达式简化集合的遍历操作?)

JavaLambda表达式简化集合遍历:forEach():对每个元素执行操作。stream():创建流进行高级操作。map():通过转换每个元素创建新集合。filter():根据条件过滤元素。reduce():将元素聚合为单个值。组合Lambda表达式:创建复杂遍历操作。好处:简化、可读、可维护的代码提高大型集合处理的性能
如何在Java中使用Lambda表达式简化集合遍历?(Java中如何利用Lambda表达式简化集合的遍历操作?)
2024-04-02

如何使用Java 8的Stream API进行集合遍历和过滤?(Java 8中如何使用Stream API进行集合的遍历和过滤操作?)

Java8StreamAPI提供了一种简洁高效的方式来遍历和过滤集合。它支持遍历集合无需显式处理索引,并提供多种过滤方法。StreamAPI的优点包括代码简洁性、可读性、效率和并行处理。示例代码展示了如何使用StreamAPI过滤VIP客户并计算总购买金额。StreamAPI的其他方法包括map()、limit()、sorted()和reduce()。
如何使用Java 8的Stream API进行集合遍历和过滤?(Java 8中如何使用Stream API进行集合的遍历和过滤操作?)
2024-04-02

Java中如何对自定义对象集合进行遍历并处理?(在Java中,如何遍历自定义对象的集合并对每个对象进行处理?)

本指南介绍了在Java中遍历自定义对象集合并对其进行处理的四种方法:增强for循环、迭代器、流以及并行流。增强for循环和流适用于小型集合和不需要修改元素的情况,而迭代器则适合需要修改元素或并发处理的场景。并行流可利用多线程提高性能。最佳实践包括考虑集合大小、并发性、元素修改和可读性。
Java中如何对自定义对象集合进行遍历并处理?(在Java中,如何遍历自定义对象的集合并对每个对象进行处理?)
2024-04-02

Jmeter如何将每次测试的结果保存到文件中

这篇文章主要介绍了Jmeter如何将每次测试的结果保存到文件中的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-10

java中如何将一个集合list转成以逗号隔开的字符串

事例代码 代码: package com.air.app;import java.util.ArrayList;import java.util.List;public class ListToStringTest { public
2023-08-17

亚马逊是如何将分析数据结果运用到各服务中的

个性化推荐:亚马逊的推荐系统会根据用户的历史购买记录、浏览记录和搜索历史等信息,为用户推荐可能感兴趣的商品和服务。这可以帮助用户节省时间和精力,并提高购买的满意度。商品分析:亚马逊可以使用分析数据来了解哪些产品最受欢迎,以及哪些产品的销售情况最好。这可以帮助亚马逊优化商品的选择和定价策略,以提高销售量和用户满意度。安全和隐私:亚马逊非常重视用户的隐私和安全,因此会对用户的数据进行保护和存储。例如,...
2023-10-27

在Java中正则表达式匹配不到结果如何解决

这篇文章主要介绍了在Java中正则表达式匹配不到结果如何解决,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和
2023-06-06

编程热搜

  • 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动态编译

目录