无法将日期插入 HSQLdb

Unable to insert Date into HSQLdb

我正在使用 HSQL 作为内存数据库进行测试。但是,我无法在列中插入日期。 下面是我的 table 创建脚本:

SET DATABASE SQL SYNTAX ORA TRUE;

create table OWN_TABLE (
    ID DECIMAL NOT NULL,
    NAME VARCHAR(24) NOT NULL,
    CAPACITY_SUPPLY_DATE DATE ,
);

我试过的查询:

INSERT INTO OWN_TABLE(ID, NAME, CAPACITY_SUPPLY_DATE) VALUES(2, '4813', '2090-07-15');

但它给出了

Caused by: java.sql.SQLDataException: data exception: invalid datetime format

我也试过2090-07-15 00:00:00但是没用。

假设 oracle 语法可能有效,我试过:

INSERT INTO LABS_CAPACITY_SUPPLY(ID, SHIP_NODE, CAPACITY_SUPPLY_DATE) VALUES(1, '4813', 'TO_DATE(2090-07-30,"yyy-MM-dd")');

但是得到了Unparseable date: "TO_DATE(2090-07-30,"yyy-MM-dd")"

有人可以告诉我将日期插入 HSQL 的正确方法吗?我有 2.3.2 罐子。

使用正确的标准SQL date 文字:

INSERT INTO OWN_TABLE
  (ID, NAME, CAPACITY_SUPPLY_DATE) 
VALUES
  (2, '4813', DATE '2090-07-15');

或者,如果您确实想使用 to_date() 函数,则不要将其放入单引号中。

INSERT INTO LABS_CAPACITY_SUPPLY
  (ID, SHIP_NODE, CAPACITY_SUPPLY_DATE) 
VALUES
  (1, '4813', TO_DATE(2090-07-30,'yyy-MM-dd'));

请注意,对于 to_date() 函数,格式字符串的大小写无关紧要。 'yyyy-MM-dd''YYYY-MM-DD''yyyy-mm-dd' 相同。格式 而不是 用于 Java 的 SimpleDateFormat 的格式。


如果您是在 Java 程序中执行此操作,则不应使用上述任何解决方案。使用 PreparedStatement 代替:

java.sql.Date dt = ...;
PreparedStatement pstmt = connect.prepareStatement("INSERT INTO OWN_TABLE(ID, NAME, CAPACITY_SUPPLY_DATE) VALUES(?,?,?)";
pstmt.setInt(1, 2);
pstmt.setString(2, "4813");
pstmt.setDate(3, dt);

如何构建 java.sql.Date 的实例取决于您从何处获取数据。您可以使用 SimpleDateFormat 来解析用户的输入。或者,如果您使用 Java 8,则可以使用 LocalDate,例如java.sql.Date.valueOf(LocaleDate.of(2090,7,30))