You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java应用从MySQL迁移至SQLite:MySQL时间戳解析异常

解决MySQL迁移SQLite后Java解析时间戳的ParseException问题

这个问题很典型——本质是日期解析器的格式模式和SQLite返回的时间戳字符串不匹配。MySQL默认的yyyy-MM-dd HH:mm:ss格式用空格分隔日期和时间,而你的Java代码里大概率用了带T分隔符的ISO标准格式(比如yyyy-MM-dd'T'HH:mm:ss),导致解析时触发格式不匹配错误。

下面是具体的解决步骤和代码示例:

1. 修正日期解析的格式模式

不管你用的是Java 8+的新日期API(推荐)还是旧的SimpleDateFormat,都要把模式改成和MySQL/SQLite的时间戳格式完全一致:

用Java 8+ DateTimeFormatter(推荐,线程安全)

// 注意这里是空格分隔,不是'T'
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 从ResultSet读取字符串后解析
String timestampStr = resultSet.getString("your_timestamp_column");
LocalDateTime dateTime = LocalDateTime.parse(timestampStr, formatter);

用旧的SimpleDateFormat(不推荐,线程不安全)

如果项目还在使用旧的日期类,可以这样调整:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestampStr = resultSet.getString("your_timestamp_column");
Date date = sdf.parse(timestampStr);

2. 优先用getString读取时间戳

SQLite的JDBC驱动对Timestamp类型的处理逻辑和MySQL驱动有差异,直接调用resultSet.getTimestamp()可能会出现隐式格式转换问题。建议先读取字符串再手动解析,这样对格式的控制更精准。

3. 处理格式不兼容的边缘情况

如果数据库中存在少量格式不一致的时间戳(比如部分记录缺少秒数),可以启用宽松解析模式兼容这类情况:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    .withResolverStyle(ResolverStyle.LENIENT);
LocalDateTime dateTime = LocalDateTime.parse(timestampStr, formatter);

这样调整后,应该就能正常解析2018-04-14 16:33:00这类格式的时间戳了。

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

火山引擎 最新活动