【问题标题】:Error - java.sql.Timestamp cannot be cast to java.sql.Date in JFreeChart错误 - java.sql.Timestamp 无法在 JFreeChart 中转换为 java.sql.Date
【发布时间】:2013-11-21 19:26:35
【问题描述】:

当我从我的数据库中检索数据以使用 JFreeChart 添加到图表时,我收到错误:

java.sql.Timestamp cannot be cast to java.sql.Date

我有四列,前三列是使用案例正确检索的,但在浏览最后一列时,它会转到正确的案例:

case Types.TIMESTAMP: {

但是这部分出现了错误:

Date date = (Date) resultSet.getObject(column);

数据库中的数据格式如下(HH,MM,SS)。

编辑 - 还想添加这个类包含在 JFreeCharts API - JDBCCategoryDataset.java

【问题讨论】:

  • 不要使用java.sql.Date来存储时间,使用java.util.Date或使用java.sql.Timestamp
  • @JavaDevil 即使将其更改为 java.util.Date,我仍然会收到此错误。错误:异常:java.sql.Timestamp 无法转换为 java.sql.Date

标签: java sql jfreechart


【解决方案1】:
Date date = new Date(((Timestamp)resultSet.getObject(column)).getTime());

【讨论】:

  • 我仍然得到同样的错误异常:java.sql.Timestamp 不能转换为 java.sql.Date
【解决方案2】:

首先,不要使用java.sql.Date 作为时间 - 它不会产生您想要的结果...除非您希望将当前时区的时间设置为 0

来自文档:

为了符合 SQL DATE 的定义,由 java.sql.Date 实例包装的毫秒值必须通过在特定时区中将小时、分钟、秒和毫秒设置为零来进行“规范化”。实例已关联。

还有为什么要使用ResultSet.getObject 并在您想使用第二个两个中的任何一个时只使用ResultSet.getDate()ResultSet.getTime()ResultSet.getTimestamp() 进行转换。

那么如果你必须使用一个日期对象,像这样创建一个java.util.Date

java.util.Date yourDate = new java.util.Date(resultSet.getTimestamp("Column").getTime());

或者如果它作为字符串"(HH,MM,SS)" 在数据库中,那么您可能想要获取一个字符串并使用像SimpleDateFormat 这样的格式化程序

SimpleDateFormat sdf = new SimpleDateFormat("(hh,MM,ss)");
Date aDate = sdf.parse(resultSet.getString("column");

【讨论】:

  • 我仍然不明白为什么我会收到错误 - 异常:java.sql.Timestamp 无法转换为 java.sql.Date 即使将其更改为 'java.util.Date' @JavaDevil
  • 您要检索的列的数据类型是什么?你做了什么来改变它?您是否像 java.util.Date 一样明确地将它用于对象的数据类型和演员表?
  • 数据类型是数据库中的日期,当它通过案例时,它被标识为时间戳,在时间戳案例中,执行以下代码,包括您建议的上述代码:java.util.Date date =新的 java.util.Date(resultSet.getTimestamp(column).getTime());数值 = new Long(date.getTime()); ---- 我刚刚更改了 getTimeStamp 中的“列”,因为它是被检索的属性。 @javaDevil
  • 这仍然给你演员异常?并且单步调试器肯定指向这一行?
  • 您使用的是什么 DBMS?
猜你喜欢
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多