Java 8 Time API - DB2/400 / JT400



我目前正在升级一个使用DB2/400数据库的应用程序,并使用最新版本的jt400.jar迁移到新的java时间api(LocalDate、LocalTime…(

但是,当按照执行语句setObject时

stmt.setObject(++columns, LocalDate.now());

我得到了这个异常

Thread[main,5,main]  Ter jan 18 10:46:56:852 GMT 2022  as400: PreparedStatementImpl STMT0001 (1588970020) : setObject().
Thread[main,5,main]  Ter jan 18 10:46:56:852 GMT 2022  as400: PreparedStatementImpl STMT0001 (1588970020) : parameter index: 2 type: java.time.LocalDate toString():2022-01-18.
Thread[main,5,main]  Ter jan 18 10:46:56:853 GMT 2022  as400: Unknown com.ibm.as400.access.SQLDate@3c679bde (1013423070) : Unable to assign object(2022-01-18) of class(class java.time.LocalDate).
Thread[main,5,main]  Ter jan 18 10:46:56:853 GMT 2022  as400: Unknown com.ibm.as400.access.SQLDate@3c679bde (1013423070) : Throwing exception, sqlState: 07006 reason: Data type mismatch. vendor code -99999.java.sql.SQLException: Data type mismatch.
at com.ibm.as400.access.JDError.createSQLExceptionSubClass(JDError.java:891)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:436)
at com.ibm.as400.access.SQLDate.set(SQLDate.java:452)
at com.ibm.as400.access.AS400JDBCPreparedStatementImpl.setValue(AS400JDBCPreparedStatementImpl.java:3655)
at com.ibm.as400.access.AS400JDBCPreparedStatementImpl.setObject(AS400JDBCPreparedStatementImpl.java:3124)
at mypackage.jdbc.LocalDateTester.main(LocalDateTester.java:26)

此外,当尝试使用从数据库读取时

rs.getObject(2, LocalDate.class)

我也得到了异常

Exception in thread "main" java.sql.SQLException: Data type not valid.
at com.ibm.as400.access.JDError.createSQLExceptionSubClass(JDError.java:985)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:436)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:413)
at com.ibm.as400.access.AS400JDBCResultSet.getObject(AS400JDBCResultSet.java:7457)
at mypackage.jdbc.LocalDateTester.main(LocalDateTester.java:47)

iSeries上的DB列类型为Date。

我是做错了什么,还是不支持新的java.timeapi?

如果是的话,有人知道是否有计划支持JavaTimeneneneba API吗?

提前感谢

您必须将java.sql.date与JDBC一起使用。转换为:

java.sql.Date.valueOf(LocalDate.now());

相关内容

  • 没有找到相关文章

最新更新