Men*_*ild 20
大多数数据库供应商尚不支持JDBC 4.2.该规范表明,使用现有方法和/应该支持新的java.time类型.不需要和提供显式转换(无API更改).LocalDatesetObject(...)getObject()
缺少支持的解决方法可以是Derby-mailing列表中描述的手动转换.
就像是:
LocalDate birthDate = resultSet.getDate("birth_date").toLocalDate();
Run Code Online (Sandbox Code Playgroud)
如您所见,这些转换使用了不推荐使用的类型java.sql.Date等,另请参阅javadoc.
Bas*_*que 18
TimestampJava 8包含java.sql.Timestamp要在java.time对象之间进行转换的类的新方法.这些便捷方法是一种权宜之计,直到可以针对新数据类型更新JDBC驱动程序.
Date&Time在java.sql.Date和java.sql.Time班有在Java中添加8以及类似java.time转换方法.
今天,我们大多数人都在使用兼容JDBC 4.2的驱动程序,与2015年的答案相比,它可以大大改善这种情况。
要从LocalDate结果集中获取:
LocalDate dateFromDatabase = yourResultSet.getObject(yourColumnIndex, LocalDate.class);
Run Code Online (Sandbox Code Playgroud)
要么
LocalDate dateFromDatabase = yourResultSet.getObject("yourColumnLabel", LocalDate.class);
Run Code Online (Sandbox Code Playgroud)
尚未添加新方法以ResultSet使其正常工作。该getObject方法一直存在。从JDBC 4.2开始,新的东西是它接受LocalDate.class作为第二个参数并返回一个LocalDate。当查询返回具有SQL数据类型的列date(确实是JDBC类型计数,但它们倾向于一致)时,以上方法起作用。
您也可以传递其他java.time类型的类。并获取对应的类型。例如:
OffsetDateTime dateTimeFromDatabase
= yourResultSet.getObject(yourTimestampWithTimeZoneColumnIndex, OffsetDateTime.class);
Run Code Online (Sandbox Code Playgroud)
要使用的java.time类型是:
SQL datatype | java.time type
------------------------+-----------------------------------------------------------
date | LocalDate
time | LocalTime
timestamp | LocalDateTime
timestamp with timezone | Officially OffsetDateTime; many drivers accept Instant too
time with timezone | OffsetTime
Run Code Online (Sandbox Code Playgroud)
为了通过另一种方式传递,从Java到数据库(用作查询参数或用于存储)PreparedStatement.setObject现在也接受上述java.time类型的对象。由于您要传递类型的对象,因此以这种方式不需要单独的类型参数。
| 归档时间: |
|
| 查看次数: |
14949 次 |
| 最近记录: |