Jooq - 日期列与时间

时间:2014-05-09 08:44:28

标签: java jdbc jooq

在我的oracle数据库中,在表中,我有一个Date列。我使用jooq获取它,它是一个简单的选择查询。 jooq获取列值,但没有时间。我错过了任何配置吗?

2 个答案:

答案 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/

jOOQ User Group

也给出了答案

答案 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) {
                    // ......
                }
            }
        }
    }
);