首页 > 解决方案 > MariaDB 驱动程序不支持从 DB 读取 Instant,但支持写入

问题描述

我知道 JDBC 4.2 驱动程序支持读取和写入 java.time 对象。我尝试使用 MariaDB 2.6 驱动程序存储和检索 Instant 对象。我正在使用 Apache Commons DB Utils 运行查询。

我可以很好地存储 Instant,但无法检索它们。这是驱动程序的错误还是我做错了什么?

存储和读取代码

String sql = "insert into TimeTest(time) values(?)";
Instant ts = Instant.from(Instant.now());
sqlQueryRunner.update(dbConnection,sql, ts);

            ResultSetHandler<Instant[]> h = new ResultSetHandler<Instant[]>() {
    public Instant[] handle(ResultSet rs) throws SQLException {
        if (!rs.next()) {
            return null;
        }

        ResultSetMetaData meta = rs.getMetaData();
        int cols = meta.getColumnCount();
        Instant[] result = new Instant[cols];

        for (int i = 0; i < cols; i++) {
            **//Does not work**
            //result[i] = rs.getObject(i+1, Instant.class);

            **//works fine**
            result[i] = rs.getObject(i+1, Timestamp.class).toInstant();
        }

        return result;
    }
};

TimeTest 是一个具有日期时间字段时间的表:

CREATE TABLE `TimeTest` (
  `time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

读取 Instant 时出错

Caused by: java.sql.SQLException: Type class 'java.time.Instant' is not supported 

标签: javajdbcmariadbjava-timejava.time.instant

解决方案


推荐阅读