如何用Java代码将数据库数据添加到List集合?

在Java开发中,将数据库中的数据添加到List集合是一个常见的需求,通常用于数据缓存、批量处理或前端展示等场景,实现这一过程的核心思路是:通过JDBC(Java Database Connectivity)或其他数据访问技术连接数据库,执行查询语句获取结果集,然后将结果集中的每条记录转换为Java对象,最终将这些对象逐个添加到List集合中,以下是详细的实现步骤、代码示例及注意事项。

准备工作

在开始之前,需确保以下环境已配置完成:

  1. 数据库驱动:根据使用的数据库(如MySQL、Oracle、PostgreSQL等),添加对应的JDBC驱动依赖,MySQL驱动的Maven依赖为:
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
  2. 数据库连接信息:包括URL、用户名、密码,例如MySQL的连接字符串格式为jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC
  3. 实体类:创建与数据库表结构对应的Java类,用于封装每条记录的数据,若数据库中有user表(包含idnameage字段),则实体类可定义为:
    public class User {
        private int id;
        private String name;
        private int age;
        // 构造方法、getter和setter省略
    }

实现步骤

加载数据库驱动并建立连接

使用Class.forName()加载驱动类(新版JDBC可省略此步骤),并通过DriverManager.getConnection()获取数据库连接对象,建议使用try-with-resources语句自动关闭资源,避免内存泄漏。

怎么往list集合添加数据库

String url = "jdbc:mysql://localhost:3306/testdb";
String username = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
    // 后续操作
} catch (SQLException e) {
    e.printStackTrace();
}

创建Statement对象并执行查询

通过连接对象创建StatementPreparedStatement(推荐使用,可防止SQL注入),然后执行查询语句(如SELECT * FROM user),返回ResultSet结果集。

String sql = "SELECT id, name, age FROM user";
try (Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery(sql)) {
    // 处理结果集
}

遍历结果集并转换为对象

逐行读取ResultSet中的数据,通过ResultSetgetXXX()方法(如getInt()getString())获取字段值,并创建实体类对象,需注意字段类型与Java类型的匹配(如数据库的DATETIME可对应java.util.Date)。

List<User> userList = new ArrayList<>();
while (rs.next()) {
    User user = new User();
    user.setId(rs.getInt("id"));
    user.setName(rs.getString("name"));
    user.setAge(rs.getInt("age"));
    userList.add(user); // 将对象添加到List
}

关闭资源

ResultSetStatementConnection均需在操作完成后关闭,try-with-resources会自动处理这一过程。

怎么往list集合添加数据库

完整代码示例

以下是一个完整的示例,展示如何从数据库查询用户数据并添加到List<User>中:

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class DatabaseToListExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String username = "root";
        String password = "123456";
        String sql = "SELECT id, name, age FROM user";
        List<User> userList = new ArrayList<>();
        try (Connection conn = DriverManager.getConnection(url, username, password);
             PreparedStatement pstmt = conn.prepareStatement(sql);
             ResultSet rs = pstmt.executeQuery()) {
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setAge(rs.getInt("age"));
                userList.add(user);
            }
            // 打印结果验证
            userList.forEach(user -> System.out.println("ID: " + user.getId() + ", Name: " + user.getName()));
        } catch (SQLException e) {
            System.err.println("数据库操作失败: " + e.getMessage());
        }
    }
}
class User {
    private int id;
    private String name;
    private int age;
    // 构造方法、getter和setter
    public User() {}
    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

优化与注意事项

  1. 使用连接池:频繁创建和关闭连接会影响性能,推荐使用HikariCP、Druid等连接池管理数据库连接。
  2. 批量处理:若数据量较大,可通过StatementaddBatch()executeBatch()方法批量执行查询,减少网络开销。
  3. ORM框架:对于复杂场景,可使用MyBatis、Hibernate等ORM框架,简化数据库操作与对象映射。
  4. 异常处理:需捕获并处理SQLException,避免程序因数据库错误中断。
  5. 字段映射:确保数据库字段名与实体类属性名一致,或通过ResultSetMetaData动态映射。

常见问题与解决方案

问题1:如何处理数据库字段与实体类属性名不一致的情况?

解答:可通过以下两种方式解决:

  • 使用别名:在SQL查询中使用AS关键字为字段指定别名,如SELECT user_id AS id FROM user
  • ORM框架:使用MyBatis的@ResultMap或Hibernate的@Column注解手动映射字段与属性的关系。

问题2:当数据量很大时,如何避免内存溢出?

解答

怎么往list集合添加数据库

  • 分页查询:通过LIMIT offset, size分页获取数据,减少单次查询的数据量。
  • 流式处理:使用JDBC的TYPE_FORWARD_ONLYFETCH_SIZE属性,结合ResultSet的游标逐行处理,避免一次性加载所有数据到内存。
  • 缓存策略:若需多次访问,可考虑使用Redis等缓存中间件存储数据,而非全部加载到List中。

通过以上步骤和注意事项,可以高效、安全地将数据库数据添加到List集合中,满足不同业务场景的需求。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-09-24 08:40
下一篇 2025-09-24 08:52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信