【发布时间】:2020-12-22 01:12:25
【问题描述】:
我正在尝试为我的 SQL Server 查询运行单元测试。查询只是将日期插入表中。我尝试了两种不同的格式,但没有奏效:
parameters.addValue(STUDY_DATE, getDate(studyEvent.getStudy().getStudyDate()));
Timestamp timestamp = new Timestamp(getDate(studyEvent.getStudy().getStudyDate()).getTimeInMillis());
parameters.addValue(STUDY_DATE, timestamp);
这是返回 Calendar 对象的getDate() 方法:
private Calendar getDate(long time) {
Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("America/New_York"));
calendar.setTimeInMillis(time);
return calendar;
}
我不确定问题是 SQL Server 的日期时间格式问题还是 hsqldb 问题。这是我的 hsqldb 创建表:
SET DATABASE SQL SYNTAX MSS TRUE;
DROP TABLE event_study IF EXISTS;
CREATE TABLE event_study
(
STUDY_ID INT,
STUDY_DATE DATE
)
我的 hsqldb 设置错了吗?还是应该为 SQL Server 使用不同的日期时间格式?
我得到的错误是:
数据异常:无效的日期时间格式;嵌套异常是 java.sql.SQLDataException: data exception: invalid datetime format
我正在运行的 SQL 查询是:
INSERT INTO event_study(study_id, study_date)
SELECT x.*
FROM (VALUES(:study_id, :study_date))
AS x(study_id, study_date)
WHERE NOT EXISTS (SELECT 1 FROM event_study s WHERE s.study_id = x.study_id)
【问题讨论】:
-
你得到的错误是什么?我们还需要查看实际运行 INSERT 语句的代码(例如,
PreparedStatement是如何创建和执行的)) -
为什么不使用具有特定数据库类型的
SqlParameter实例(例如:Types.DATE)?
标签: sql-server hsqldb