HSQLDB - 日期格式:转换中的数据类型不兼容或日期时间格式无效
HSQLDB - Date Format : Incompatible data type in conversion or invalid datetime format
我正在 Hsqldb 中进行集成测试。我的生产数据库是 Oracle 数据库。
版本
Hibernate : 4.1.3.final.
Hsqldb : 2.3.3. ( I can't use the 2.3.4 because it can't run all my junit tests in one click.)
我的问题
当我不得不测试包含 WHERE
条件询问日期的查询的方法时,我遇到了两个不同的异常:
org.hsqldb.HsqlException: incompatible data types in combination
或
org.hsqldb.HsqlException: data exception: invalid datetime format
导致异常的代码
下面的代码导致了第一个异常(不兼容的数据类型组合)
select = "from Player player where player.creationDate = to_char(sysdate,'dd/MM/yy')"
下面的代码导致了第二个异常(无效的日期时间格式)
select = "from Player player where player.creationDate > '01/01/2016'"
我是如何解决这个问题的
1) 很明显,问题出在日期格式上。 Hsqldb 支持 'yyyy-MM-dd'
日期格式,所以当我将 to_char(sysdate,'dd/MM/yy')
和 01/01/2016
更改为 1995-01-01
时,它工作正常。
但是,我无法更改这些方法的日期格式。
2) 转念一想,我考虑过修改hsqldb源代码,但似乎有点激进。
除了后者还有其他选择吗?
感谢您的宝贵时间。
不要尝试格式化日期。请改用带有命名参数的查询。
然后您可以对所有数据类型使用设置器。请参见下面的示例:
String hql = "from Player player where player.creationDate = :date";
List result = session.createQuery(hql)
.setDate("date", new Date()).list();
我正在 Hsqldb 中进行集成测试。我的生产数据库是 Oracle 数据库。
版本
Hibernate : 4.1.3.final.
Hsqldb : 2.3.3. ( I can't use the 2.3.4 because it can't run all my junit tests in one click.)
我的问题
当我不得不测试包含 WHERE
条件询问日期的查询的方法时,我遇到了两个不同的异常:
org.hsqldb.HsqlException: incompatible data types in combination
或
org.hsqldb.HsqlException: data exception: invalid datetime format
导致异常的代码
下面的代码导致了第一个异常(不兼容的数据类型组合)
select = "from Player player where player.creationDate = to_char(sysdate,'dd/MM/yy')"
下面的代码导致了第二个异常(无效的日期时间格式)
select = "from Player player where player.creationDate > '01/01/2016'"
我是如何解决这个问题的
1) 很明显,问题出在日期格式上。 Hsqldb 支持 'yyyy-MM-dd'
日期格式,所以当我将 to_char(sysdate,'dd/MM/yy')
和 01/01/2016
更改为 1995-01-01
时,它工作正常。
但是,我无法更改这些方法的日期格式。
2) 转念一想,我考虑过修改hsqldb源代码,但似乎有点激进。
除了后者还有其他选择吗?
感谢您的宝贵时间。
不要尝试格式化日期。请改用带有命名参数的查询。 然后您可以对所有数据类型使用设置器。请参见下面的示例:
String hql = "from Player player where player.creationDate = :date";
List result = session.createQuery(hql)
.setDate("date", new Date()).list();