在我的oracle数据库中,在表中,我有一个Date列。我使用jooq获取它,它是一个简单的选择查询。 jooq获取列值,但没有时间。我错过了任何配置吗?
答案 0 :(得分:2)
默认情况下,jOOQ将Oracle的DATE
列映射到java.sql.Date
,将TIMESTAMP
列映射到java.sql.Timestamp
。
如果您想使用Oracle的历史DATE
语义(具有秒精度的日期时间),那么您还可以使用jOOQ为java.sql.Timestamp
列生成DATE
列<dateAsTimestamp/>
代码生成标志:
<!-- Generate java.sql.Timestamp fields for DATE columns. This is
particularly useful for Oracle databases.
Defaults to false -->
<dateAsTimestamp>false</dateAsTimestamp>
详细信息: http://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/
也给出了答案答案 1 :(得分:1)
我在网上找到的这个问题的所有答案或多或少与代码生成有关,但我正在研究一个框架项目,并且不想将我的代码耦合到任何特定的数据库。
我遇到的问题是,在调用DATE
方法时,JOOQ会从Record.getValue()
列的数据中删除时间部分。
根据JOOQ's doc,我通过从基础DATE
获取ResultSet
列的值而不是使用Record.getValue()
来处理它。
示例代码:
ResultQuery<Record> query;
Cursor<Record> cursor = query.fetchLazy(fetchSize);
cursor.fetchOne(new RecordMapper<Record, Map<String, Object>>() {
@Override
public Map<String, Object> map(final Record record) {
for (Field<?> field : record.fields()) {
record.getValue(field, converter);
if ("date".equals(field.getDataType().getTypeName())) {
resultSet resultSet = cursor.resultSet();
try {
Timestamp ts = resultSet.getTimestamp(field.getName());
} catch (SQLException e) {
// ......
}
}
}
}
);