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
相关产品推荐
相关产品推荐

