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

2019-09-17 05:00发布

我查询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
                }
            }
        };

Answer 1:

该ClassCastException异常来了,因为你想投的时间类作为一个字符串。 因为java.sql.Time中和java.sql.Date是java.util.Date的子类都出现作为一个Date对象。 这些子类只是薄包装(只有足够的额外信息,同样的事情在被映射到SQL列)。 因此,在JTable中自java.sql中的类型无关的Swing组件大部分它被用作java.util.Date摇摆。



文章来源: java.sql.Time object being confused with java.sql.Date object