上一篇
场景引入:
小明刚学会用Java操作数据库,突然接到需求——“把用户表数据全部缓存到内存里快速查询!” 😱 他盯着屏幕发呆:怎么把数据库里密密麻麻的记录,变成程序里灵活的ArrayList
对象呢?别急,这篇指南就是你的数据搬运工具箱!
// 就像个会自动扩容的魔法口袋 📦 ArrayList<User> userList = new ArrayList<>();
ArrayList<User>
表示只能存User对象(类型安全✨) userList.add(new User()); // 装东西 ➕ userList.get(0); // 取东西 🔍 userList.remove(0); // 丢东西 🗑️
// 1️⃣ 建立数据库连接(以MySQL为例) String url = "jdbc:mysql://localhost:3306/mydb"; Connection conn = DriverManager.getConnection(url, "user", "password"); // 2️⃣ 创建Statement对象 Statement stmt = conn.createStatement();
⚠️ 记得用try-with-resources
自动关闭连接:
try (Connection conn = DriverManager.getConnection(url, user, pwd)) { // 操作代码... }
假设有users
表结构:
id INT | name VARCHAR | age INT
步骤分解:
定义实体类:
public class User { private int id; private String name; private int age; // 记得生成getter/setter和构造方法哦! }
查询并转换:
ArrayList<User> userList = new ArrayList<>(); String sql = "SELECT * FROM users"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { // 逐行读取 User user = new User( rs.getInt("id"), rs.getString("name"), rs.getInt("age") ); userList.add(user); // 装入ArrayList 🎁 }
如果需要联表查询,只需调整SQL和实体类:
// 假设查询用户+订单数量 String sql = "SELECT u.*, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id=o.user_id GROUP BY u.id"; // 实体类新增字段 class UserWithOrders extends User { private int orderCount; // ...其他代码 }
// 分批查询(LIMIT语法) String sql = "SELECT * FROM users LIMIT 1000 OFFSET 0"; // 后续批次调整OFFSET值
public class DbToListUtil { public static <T> ArrayList<T> convert(ResultSet rs, RowMapper<T> mapper) { ArrayList<T> list = new ArrayList<>(); while (rs.next()) { list.add(mapper.mapRow(rs)); } return list; } } // 使用示例 ArrayList<User> users = DbToListUtil.convert(rs, (rs) -> new User(rs.getInt("id"), rs.getString("name")));
现在你已经是数据搬运的熟练工啦!下次遇到“数据库转ArrayList”的需求,记得掏出这份秘籍~ 🚀
小贴士:实际开发中推荐使用MyBatis/Hibernate等ORM框架,但理解底层原理能让你更从容应对复杂场景哦!
本文由 能冰枫 于2025-08-08发表在【云服务器提供商】,文中图片由(能冰枫)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/569277.html
发表评论