我查询MySQL表,并选择VARCHAR,日期,时间,双和布尔数据类型。 我把数据从ResultSet,并把它放在一个DefaultTableModel,然后把JTable中获取,然后显示一个JScrollPane。
所有的数据都只是在他们的java.sql.Time对象的列正确显示。 这些被显示为一个日期对象,它们都具有1970年1月1日的价值。
看来,为java.sql.Time对象被读取为java.sql.Date对象(我猜01月01被返回1970,因为时间价值,这将是有效的Date对象的范围之外)。
我很困惑,因为如果我重写的getColumnClass方法中的DefaultTableModel始终,返回String.class并使用表的方法setAutoCreateRowSorter(真),当我上含有的java.sql.Time对象列的标题点击排序吧, java.lang.ClassCastException被抛出时,它说的java.sql.Time不能被强制转换为字符串。 为什么这个正确识别数据的java.sql.Time,但如果我重写的DefaultTableModel的getColumnClass返回正确的类,它认为这是一个日期,而不是时间? 任何解决问题的帮助将不胜感激。 这里是我如何重写他的getColumnClass中的DefaultTableModel方法:
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
}
}
};