【问题标题】:java.sql.timestamp versus datejava.sql.timestamp 与日期
【发布时间】:2012-01-16 09:03:42
【问题描述】:

我正在使用带有 Java 和 Eclipse 的 Derby 数据库。我有一个具有 TIMESTAMP 字段的表,我使用模型从中填充 JTable。我发现时间戳和数据以及 java.sql 和 java.utils 非常令人困惑。以下代码行与cannot cast date to timestamp 错误。 mod 是连接 Derby 表和 JTable 的模型。

int rowcount = mod.getRowCount();
java.sql.Timestamp ts = (java.sql.Timestamp) mod.getValueAt(rowcount-1,1);

我的目标是获取最近记录的日期并减去 30 天,然后在同一数据库上运行 sql 查询以查找比该日期更近的所有记录。如何恢复第一个时间戳,减去 30 天,然后构造一个查询,将减法的结果作为 WHERE 子句中的条件。听起来很简单,但我遇到了很大的困难,我觉得我一定错过了一些基本原则。我认为转换为 long 和 back 可能是这条路线,但遇到了同样的演员表问题。

【问题讨论】:

  • 你不能使用 Derby 内置的日期函数在一个 sql-request 中完成所有事情吗?

标签: java sql date


【解决方案1】:

时间戳被声明为

public class Timestamp extends java.util.Date { ... }

因此您不能将日期转换为时间戳,您可以根据日期创建时间戳。

Timstamp ts = new Timestamp( date.getTime() );

要减去 30 天,此序列可能会有所帮助:

Calendar cal = new GregorianCalendar();
cal.setTime( date.getTime() );
cal.add( Calendar.DAY_OF_MONTH, -30 );
Date d30 = cal.getTime();

无论如何,我会尝试仅使用 SQL 来执行此操作。

【讨论】:

  • java.util.Date ts = (java.util.Date)mod.getValueAt(rowCount-1,1);
  • myResult = statement .executeQuery("SELECT * FROM MYENERGYAPP.energytable9 WHERE MYDATETIME > "+ "{fn TIMESTAMPADD(SQL_TSI_MONTH, -1,timestamp('"+ts+"'))}");
  • 以上 2 个 cmets 是在我之前添加的 - 它们是我最终想出的解决方案。
  • @ron 您可以随时提交自己的问题答案,而不是发布一系列难以格式化/阅读的 cmets。
猜你喜欢
  • 2020-10-04
  • 2018-10-29
  • 2021-04-03
  • 2014-07-18
  • 2020-06-30
  • 2023-03-27
  • 1970-01-01
  • 2018-02-25
  • 2020-03-05
相关资源
最近更新 更多