注入日期或LocalDate到SQL查询通过jdbcTemplate.query?



我有一个简单的查询:

select * from sometable where date = ?

我在查询中注入了一个LocalDate:

jdbcTemplate.query(QUERY, date);

一切正常。在我我的IDE项目移动到另一个电脑,没有任何改变,它开始抛出例外:

nested exception is org.postgresql.util.PSQLException: 
Can't infer the SQL type to use for an instance of java.time.LocalDate. 
Use setObject() with an explicit Types value to specify the type to use.

我可以通过将LocalDate转换为Date来解决这个问题:

jdbcTemplate.query(QUERY, java.sql.Date.valueOf(date));

但是它对我来说似乎不对:我想知道原因。我检查了什么:

  1. PostgreSQL版本相同(BTW尝试升级到14)
  2. JDK版本相同
  3. PostgreSQL的POM依赖是相同的。

java.time.LocalDate自Java-8以来一直可用,而您的JDBC驱动程序是基于Java-7的,因此出现了问题。将JDBC驱动程序升级到最新的驱动程序(以下),或者至少升级到支持最低Java-8的驱动程序。

<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.24</version>
</dependency>

注意:java.utilDate-Time API及其子API过时且容易出错。建议完全停止使用它们,切换到现代的Date-Time API*


*如果你正在为一个Android项目工作,你的Android API级别仍然不兼容Java-8,检查Java 8+可用的API。注意,Android 8.0 Oreo已经提供了对java.time的支持。

相关内容

  • 没有找到相关文章