java - 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
解决方案
推荐阅读
- android - 如何自动(以编程方式)安装智能手表应用程序,当我在配套应用程序上单击和事件而无需发布到 Playstore
- mongoose - 如何在 mongoose 中加入 3 个集合
- mysql - 查找购买数量第二高的国家
- jenkins - 名称阴影隐藏的调用管道步骤
- angular - *ngIf 中的嵌套条件使用 ng-container
- c# - 如何仅使用以下示例在 LINQ 中成功使用 CopyToDataTable() 方法?
- react-native - 我如何在 react-native-zoom-us 中获得会议持续时间
- oracle - Oracle“DBMS_METADATA.GET_DDL”使用问题
- flutter - 如何在颤动中将 ip Camera Stream 直接流式传输到 Youtube
- mysql - Mysql - 加入类似的查询