c语言编程笔录

首页 >   > 笔记大全

笔记大全

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

更新时间:2023-12-12

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

ResultSet是Java中处理数据库查询结果非常重要的一个类,它用于封装数据库查询结果,而List是Java中常用的一个集合类型,封装了多个相同类型的元素,那么我们该如何将ResultSet结果集遍历到List中呢?下面我会为大家一一介绍。

第一种方法:使用List和while循环遍历ResultSet结果集

这种方法是最基本、最常见的方法,我们可以通过下面的代码实现:

    // 创建List集合对象
    List resultList = new ArrayList<>();
    
    // 获取数据查询结果集
    ResultSet rs = stmt.executeQuery(sql);
    
    // 循环遍历结果集
    while(rs.next()) {
        String name = rs.getString("name");
        resultList.add(name);
    }

在这段代码中,我们先创建了一个List集合对象resultList,然后通过执行sql语句获取查询结果集ResultSet对象rs,我们使用while循环遍历结果集,通过rs.getString("name")获取每一行结果集中name列的值,最后将其添加到resultList集合中。这样,我们就可以遍历ResultSet结果集并将其封装到List集合中了。

第二种方法:使用Java 8的Stream API遍历ResultSet结果集

如果项目中使用的是Java 8及以上的版本,我们也可以使用Java 8的Stream API来遍历ResultSet结果集。下面是Java 8的Stream API版本的代码:

    // 获取数据查询结果集
    ResultSet rs = stmt.executeQuery(sql);
    
    // 使用Stream API遍历结果集
    List resultList = StreamSupport.stream(
        new Spliterators.AbstractSpliterator(Long.MAX_VALUE, Spliterator.ORDERED) {
            
            public boolean tryAdvance(Consumer<? super String> action) {
                try {
                    if(!rs.next()) {
                        return false;
                    }
                    action.accept(rs.getString("name"));
                    return true;
                } catch(SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            
            public long estimateSize() {
                return Long.MAX_VALUE;
            }
        }, false).collect(Collectors.toList());

在这段代码中,我们使用了Java 8的StreamSupport类来初始化一个Stream对象,然后使用tryAdvance方法遍历结果集中的每一行数据,并将每一行中name列的值传递给Consumer对象,最后使用collect(Collectors.toList())方法来创建List对象,将每行中name列的值封装到集合中。需要注意的是,这种方法对于大量数据的查询可能不太适用。

第三种方法:使用Apache Commons DbUtils提供的ResultSetHandler将ResultSet转换为List

Apache Commons DbUtils是Apache基金会提供的数据库操作工具库,其中提供了ResultSetHandler接口,该接口定义了一个处理查询结果集的方法,我们可以使用这个ResultSetHandler来将ResultSet转换为List集合。下面是具体的实现:

    // 获取数据查询结果集
    ResultSet rs = stmt.executeQuery(sql);
    
    // 使用ResultSetHandler将ResultSet转换成List
    ResultSetHandler> handler = new ResultSetHandler>() {
        
        public List handle(ResultSet rs) throws SQLException {
            List resultList = new ArrayList<>();
            while(rs.next()) {
                resultList.add(rs.getString("name"));
            }
            return resultList;
        }
    };
    List resultList = runner.query(connection, sql, handler);

在这段代码中,我们创建了一个ResultSetHandler对象handler,并重写了handle方法以遍历ResultSet结果集中每一行的数据,并将name列的值添加到resultList集合中。最后,使用query方法将查询语句和handler对象传递给Apache Commons DbUtils提供的QueryRunner对象,并将返回的List集合赋值给resultList对象。需要注意的是,这种方法需要导入Apache Commons DbUtils相关的jar包。

总结

通过本文的介绍,我们了解了三种不同的方法将ResultSet结果集遍历到List集合中:

  1. 使用List和while循环遍历ResultSet结果集。
  2. 使用Java 8的Stream API遍历ResultSet结果集。
  3. 使用Apache Commons DbUtils提供的ResultSetHandler将ResultSet转换为List。

具体使用哪种方法,需要根据项目实际需求和开发环境选择。我们可以根据数据量大小以及项目需要进行选择。此外,需要根据数据库类型、版本以及具体情况来配置连接池、查询参数等信息。