如何解决HSQLDB为SQL Server插入日期时间格式会引发异常
我正在尝试为我的sql Server查询运行单元测试。查询只是在表中插入日期。我尝试了两种不同的格式,但是没有用:
parameters.addValue(STUDY_DATE,getDate(studyEvent.getStudy().getStudyDate()));
Timestamp timestamp = new Timestamp(getDate(studyEvent.getStudy().getStudyDate()).getTimeInMillis());
parameters.addValue(STUDY_DATE,timestamp);
这是getDate()
方法,它返回Calendar对象:
private Calendar getDate(long time) {
Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("America/New_York"));
calendar.setTimeInMillis(time);
return calendar;
}
我不确定问题是sql Server的datetime格式问题还是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:数据异常:无效的日期时间格式
我正在运行的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)
解决方法
由于您没有在日期中使用字符串,因此这实际上不是格式问题,而是Java类型问题。根据您的表定义,DATE
没有时间信息。您可以创建一个java.sql.Date
对象作为参数值。如果您想要一个datetime列,其中包含一天中的时间信息,则在表定义中使用TIMESTAMP
,并在参数值中使用java.sql.Timestamp
。
在任何一种情况下,您都不能将Calendar对象用作参数值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。