无法将日期插入 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))
我正在使用 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))