gpt4 book ai didi

java.sql.Time 对象与 java.sql.Date 对象混淆

转载 作者:行者123 更新时间:2023-11-29 02:03:29 24 4
gpt4 key购买 nike

我正在查询 MySQL 表并选择 varchar、Date、Time、Double 和 Boolean 数据类型。我从 ResultSet 中获取数据并将其放入 DefaultTableModel 中,然后将其放入 JTable 中,然后放入 JScrollPane 中进行显示。

除其中包含 java.sql.Time 对象的列外,所有数据均正确显示。这些显示为日期对象,它们的值都是 1970 年 1 月 1 日。

似乎 java.sql.Time 对象被读取为 java.sql.Date 对象(我猜 1970 年 1 月 1 日被返回,因为时间值超出了日期对象的有效范围).

我很困惑,因为如果我重写 DefaultTableModel 中的 getColumnClass 方法以始终返回 String.class 并使用表方法 setAutoCreateRowSorter(true),当我单击包含 java.sql.Time 对象的列的标题进行排序时它,一个 java.lang.ClassCastException 被抛出,它说 java.sql.time 不能被转换为一个字符串。为什么这会正确地将数据识别为 java.sql.Time,但如果我覆盖 DefaultTableModel getColumnClass 以返回正确的类,它会将其视为日期而不是时间?解决问题的任何帮助将不胜感激。以下是我如何覆盖 DefaultTableModel 中的 getColumnClass 方法:

        model = new DefaultTableModel() {
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == numberOfColumns) {
return Boolean.class;
} else {
return getValueAt(1, columnIndex).getClass(); //return actual class
return String.class; //return string regardless of what class is
}
}
};

最佳答案

ClassCastException 即将出现,因为您正试图将 Time 类转换为字符串。它显示为 Date 对象,因为 java.sql.Time 和 java.sql.Date 都是 java.util.Date 的子类。这些子类只是简单的包装器(同样的东西,只是有足够的额外信息可以映射到 SQL 列中)。因此在 Swing JTable 中,它被用作 java.util.Date,因为 java.sql 类型在大多数情况下与 swing 组件无关。

关于java.sql.Time 对象与 java.sql.Date 对象混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10569469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com