从Java将格式化日期传递给hsql

Posted

技术标签:

【中文标题】从Java将格式化日期传递给hsql【英文标题】:Passing formatted date to hsql from Java 【发布时间】:2013-06-21 12:47:14 【问题描述】:

我正在使用以下代码生成一个日期,以将其作为日期参数传递到 hsql 数据库日期字段中。

  Calendar cal = Calendar.getInstance();  
  cal.setTime(new Date());  
  cal.set(Calendar.HOUR_OF_DAY, 0);
  cal.set(Calendar.MINUTE, 0);
  cal.set(Calendar.SECOND, 0);
  cal.set(Calendar.MILLISECOND, 0);
  cal.add(Calendar.YEAR, -1);
  Date cutOffDate = cal.getTime();
  String dateFormatter = new SimpleDateFormat("dd-MMM-yyyy").format(cutOffDate);
  queryBuilder.append(" and c.ContactDt >= :cutOffDate ");

但是 c.ContactDt 是日期。我需要通过日期。如果我传递值 cal.getTime(),它会显示无效格式。所以我需要将dateFormatter 转换为日期。

我添加了太多代码来转换它。所以我想一定有更好的方法来做到这一点。 有什么想法吗?

【问题讨论】:

【参考方案1】:

由于 hsqldb 将日期指定为“DATE yyyy-mm-dd”,因此您应该以这种方式对其进行格式化。 例如“日期 1990 年 11 月 11 日”

【讨论】:

【参考方案2】:

Calendar.getTime 返回一个日期,Date.getTime() 返回一个长整数。这是我用来将日期传递到 HSQL 存储过程的示例。注意我转换为 java.sql.date。可能是一种更好的方法,但至少你看到了一种方法。

static JSONArray getSigsummXtab(Connection cn, int mySiteid, Date myDate ) throws SQLException 
PreparedStatement pstmt = cn.prepareStatement(" call rpt.getSigsummXtab(?, ?) ");
pstmt.setInt(1, mySiteid);
pstmt.setDate(2, new java.sql.Date(myDate.getTime()));
pstmt.execute(); 
pstmt.close();

【讨论】:

我们没有使用常规的 JDBC 这里有几个示例 SQL 语句。请注意,您必须在语句中输入 DATE 或 TIMESTAMP。 select (TIMESTAMP(1341414550)) from (values(0)) select * from ms.ssid where cdate > DATE '2013-02-09'; 正如我所提到的,它不是常规的 JDBC SQL。我们正在使用 HQL、JPA 查询。所以没有Statement等 抱歉,我没有使用过 JPA,但看起来我的建议可能对 where 子句有所帮助。我现在明白你在做什么了。

以上是关于从Java将格式化日期传递给hsql的主要内容,如果未能解决你的问题,请参考以下文章

时间戳转为日期格式

将动态格式化的日期时间传递给 K8s 容器配置

将日期从 HTML 表单传递到 servlet 到 SQL 数据库

将日期时间转换为字符串格式并将其传递给查询

如何将 Java 日期字符串/对象转换为 JFreeChart 日期格式?

Java 日期格式:字符串到 XMLGregorianCalendar