java操作List
发布日期:2025-03-29 02:43:49 浏览次数:9 分类:精选文章

本文共 1789 字,大约阅读时间需要 5 分钟。

List接口是Java中的一个常用集合接口,它定义了一系列操作方法,使得程序能够对集合进行 CRUD(创建、读取、更新、删除)等操作。学习List接口的实现类,比如ArrayList,能够帮助我们更好地理解集合的优势。

在实际项目开发中,我们经常需要从数据库中读取数据并将其存储到List中。然而,最近在操作数据库时遇到了一个棘手的问题:从表中获取的记录在List中看起来都一样,且全部显示为最后一条记录。此次经历让我深刻认识到一个容易被忽视的问题,也让我对List对象的创建方式有了更深入的理解。

数据库操作与List存储问题

数据库表的结构如下:

CategoryID CategoryName
1 programming
2 design
3 analysis
4 testing

我编写了如下的代码来获取所有分类:

public List
GetAllCategory() { try { String sql = "select * from tbCategory"; ResultSet rs = DbCRUD.Select(sql); List
list = new ArrayList<>(); Category c = new Category(); while (rs.next()) { // c = new Category(); 这里缺少了这一行代码 // 后续操作会将同一对象多次添加到List中 c.setCategoryId(rs.getInt(1)); c.setCategoryName(rs.getString(2)); list.add(c); } // ... 其他代码 ... } catch (...) { // 处理异常逻辑 }}

通过调试,我发现问题出在GetAllCategory方法中。当rs.next()方法获取到数据库中的每一条记录时,程序执行c.setCategoryId()c.setCategoryName()操作,然后将c对象添加到List中。然而,我没有在每次循环开始时创建新的Category对象,而是重复使用了相同的c对象。如果忘记重新创建c,所有List中的元素都将指向同一个Category对象,结果导致所有记录看起来都相同,且仅显示最后一条记录。

解决方法

为了解决这个问题,我在循环开始处添加了以下代码:

public List
GetAllCategory() { try { String sql = "select * from tbCategory"; ResultSet rs = DbCRUD.Select(sql); List
list = new ArrayList<>(); Category c = new Category(); while (rs.next()) { c = new Category(); c.setCategoryId(rs.getInt(1)); c.setCategoryName(rs.getString(2)); list.add(c); } // ... 其他代码 ... } catch (...) { // 处理异常逻辑 }}

这样,每次循环都会创建一个新对象c,确保List中存储的每个Category对象都是独一无二的,避免了引用同一对象多次的情况。

总结

在进行数据库操作时,尤其是涉及对象复制和List存储时,注意对象的创建和引用非常关键。重复使用同一对象会导致意想不到的结果,影响程序的正确性和用户体验。这次经历让我更加注意对象的生命周期管理,以避免类似的错误再次发生。

上一篇:Java操作Sql语句 出现迭代死循环 (Bug排查)
下一篇:Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

发表评论

最新留言

不错!
[***.144.177.141]2025年04月18日 16时50分55秒