You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ojdbc8升级至21.3.0.0后ResultSet.getString()日期丢失毫秒问题咨询

ojdbc8 21.3.0.0获取DATE列字符串丢失毫秒的问题

变更原因

Oracle在ojdbc8 19c及后续版本(包括21.3.0.0)里调整了DATE类型的字符串输出逻辑。之前12.2版本会默认给DATE类型的字符串附加毫秒部分,但新版本严格对齐了Oracle原生DATE类型的定义——Oracle的DATE本身只精确到秒,不存储毫秒数据,所以getString()返回的字符串就不再包含毫秒后缀了。

解决办法

方法1:调整查询或列类型

如果业务确实需要毫秒精度,要么把数据库列改成TIMESTAMP类型(原生支持毫秒存储),要么在SQL查询里显式指定格式化规则,比如:

SELECT TO_CHAR(your_date_column, 'YYYY-MM-DD HH24:MI:SS.FF1') AS formatted_date FROM your_table

之后用getString("formatted_date")就能拿到带一位毫秒的字符串。

方法2:设置JDBC连接属性

建立连接时添加oracle.jdbc.dateTimeStringFormat=ISO属性,强制驱动用ISO格式输出日期时间字符串,包含毫秒部分。示例代码:

Properties connProps = new Properties();
connProps.setProperty("user", "your_user");
connProps.setProperty("password", "your_pwd");
connProps.setProperty("oracle.jdbc.dateTimeStringFormat", "ISO");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//db-host:port/service", connProps);

方法3:手动格式化日期对象

放弃用getString(),改用getTimestamp()获取Timestamp对象,再手动格式化为目标字符串。示例代码:

Timestamp dateTs = rs.getTimestamp("your_date_column");
// 用Java 8+的DateTimeFormatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
String formattedStr = formatter.format(dateTs.toLocalDateTime());

内容的提问来源于stack exchange,提问作者user2359634

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:10:22