微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HSQLDB为SQL Server插入日期时间格式会引发异常

如何解决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 举报,一经查实,本站将立刻删除。