Men*_*ild 20
大多数数据库供应商尚不支持JDBC 4.2.该规范表明,使用现有方法和/应该支持新的java.time
类型.不需要和提供显式转换(无API更改).LocalDate
setObject(...)
getObject()
缺少支持的解决方法可以是Derby-mailing列表中描述的手动转换.
就像是:
LocalDate birthDate = resultSet.getDate("birth_date").toLocalDate();
Run Code Online (Sandbox Code Playgroud)
如您所见,这些转换使用了不推荐使用的类型java.sql.Date
等,另请参阅javadoc.
Bas*_*que 18
Timestamp
Java 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 次 |
最近记录: |