【发布时间】:2019-11-27 19:25:06
【问题描述】:
我正在尝试使用 Java 查询 DB2 数据库并将 DATEIME 列映射到 Date,但出现此错误:
DB2 SQL 错误:SQLCODE=-181,SQLSTATE=22007,SQLERRMC=null,DRIVER=4.21.29
简短说明:日期时间值的字符串表示形式是 不是有效的日期时间值 C
日期时间的字符串表示不在可接受的范围内 或格式不正确。日期时间值的正确范围 如下: 表 2. 日期时间值的范围 Datetime Numeric 范围 年 0001 到 9999 月 1 到 12 天 四月、六月、九月、 11 月(第 4、6、9、11 个月) 2 月 1 日至 30 日(第 2 个月) 1 至 28 日(闰年) 1 至 29 年)1 月、3 月、5 月、7 月、8 月、10 月、12 月 (第 1、3、5、7、8、10、12 个月) 1 到 31 小时 0 到 24 (如果小时为 24, 时间值的其他部分为零。如果小时是美国,最大小时是 12.) 分 0 到 59 秒 0 到 59 微秒 0 到 999999 系统操作:无法执行该语句。程序员回应:检查 该值是否在有效范围内并且在适当的范围内 格式。请参阅 DB2 SQL 参考的第 2 章以获取有关 字符串数据格式。
首先我将 LocalDate 转换为 Date
public static Date convertLocalDateToDate(LocalDate date) {
return Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
第二个我在使用规范 API
public static Specification<MyEntity> dataUse(Date dataUse){
return (root, query, builder) -> builder.equal(root.get("myDate"), dataUse);
}
我在实体中的字段是映射为
@Column(name="DT_EX_MOVI_IN")
@Temporal(TemporalType.DATE)
private Date myDate;
最后当我尝试执行查询时
repository.findAll(query);
我收到错误错误DB2 SQL Error: SQLCODE=-181, SQLSTATE=22007, SQLERRMC=null, DRIVER=4.21.29
有人可以帮助我吗?
谢谢
【问题讨论】:
-
在我的数据库中,我想比较的日期被创建为日期
-
你使用的是 java.sql.Date 类还是 java.util.Date ?为什么不直接将列映射到 LocalDate ?
-
问题不在于我为我的 Object Java 获取 DB 数据时。问题是当我执行查询时。问题:我的 DB2 有一个作为 DATE 的 collum 映射,而不是 DATETIME。当我尝试使用 DATETIME 在我的 DB2 中使用列与 Object JAVA DATE 进行比较时,我可以返回数据,但是当我尝试在我的 DB2 中使用列执行我的 Object JAVA DATE 和 DATE 时,我收到错误 DB2 SQL 错误:SQLCODE= -181,SQLSTATE=22007,SQLERRMC=null,驱动程序=4.21.29。我已经尝试使用 DATE 类型的其他类型 Object Java 执行查询,例如 DATE、DateLocal、LocalDateTime,但我没有成功。
标签: java date jpa db2 spring-data