
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 ListGetAllCategory() { 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 ListGetAllCategory() { 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存储时,注意对象的创建和引用非常关键。重复使用同一对象会导致意想不到的结果,影响程序的正确性和用户体验。这次经历让我更加注意对象的生命周期管理,以避免类似的错误再次发生。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月18日 16时50分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
BitLocker驱动器加密概述
2023-01-24
Burp Suite使用进阶
2023-01-24
BurpSuite实战九之使用Burp Repeater
2023-01-24
BurpSuite实战八之使用Burp Intruder
2023-01-24
Ceph RBD块存储详解
2023-01-24
Ceph企业级实战
2023-01-24
Ceph存储引擎详解
2023-01-24
Ceph对象存储详解
2023-01-24
Cisco防火墙配置实战
2023-01-24
CISSP-安全与风险管理
2023-01-24
Clickhouse NoSQL数据库详解
2023-01-24
ContextLoaderListener自动装配配置信息
2023-01-24
DCS控制系统概述
2023-01-24
DDNS动态域名无固定IPSEC配置实战
2023-01-24
DELL笔记本UEFI+GPT安装window10与Ubuntu双系统
2023-01-24
Docker+Jenkins+GIT CICD持续化集成实战
2023-01-24
Dockerfile 指令详解
2023-01-24
Docker安装MongoDB(附Docker虚拟机环境与MongoDB客户端连接工具)
2023-01-24
DRBD分布式存储解决方案实战
2023-01-24