You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX:ResultSet数据导入TableView仅重复显示最后一行

解决TableView重复显示最后一行数据的问题

这种情况我之前踩过好多次坑,大概率是你遍历ResultSet的时候重复复用了同一个实体对象实例,没在每次循环里新建对象导致的。

先给你看个典型的错误代码示例,你可以对照下自己的代码是不是类似:

// 错误写法:对象在循环外创建,重复复用
Alarm alarm = new Alarm();
List<Alarm> dataList = new ArrayList<>();
while(resultSet.next()){
    alarm.setId(resultSet.getInt("id"));
    alarm.setName(resultSet.getString("name"));
    // 其他属性赋值操作...
    dataList.add(alarm);
}

为啥会出问题?因为你只创建了一个Alarm对象,每次循环只是修改这个对象的属性值,然后把同一个对象的引用塞到列表里。列表里的所有元素其实都是指向同一个内存地址的对象,最后自然全显示最后一次修改后的内容。

正确的写法应该这样改:

把对象的创建逻辑放到循环内部,每次循环都生成一个全新的实例:

// 正确写法:每次循环新建对象
List<Alarm> dataList = new ArrayList<>();
while(resultSet.next()){
    Alarm alarm = new Alarm(); // 关键!每次循环都创建新对象
    alarm.setId(resultSet.getInt("id"));
    alarm.setName(resultSet.getString("name"));
    // 其他属性赋值操作...
    dataList.add(alarm);
}

这样每次添加到列表里的都是独立的对象实例,各自保存当前行的数据库数据,TableView自然就能正常显示所有不同的行内容了。

快速验证小技巧

你可以在循环里打印每个对象的hashCode():

System.out.println(alarm.hashCode());

如果错误写法里打印的hashCode全一样,就实锤是复用同一个对象的问题;正确写法里每个hashCode都不同,说明是全新的对象。

内容的提问来源于stack exchange,提问作者ehr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:27:19