背景
随着jar漏洞被发现,我们必须升级版本来规避漏洞,但升级版本同样会导致意想不到的其他问题。
当升级mysql-connector-java版本时,从数据库读取的datetime数据类型发生了变化,由原来的Timestamp变为LocalDateTime。
版本
8.0.17 -> 8.0.26
问题复现
表结构:
依赖版本:
<!--数据库连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
<!-- <scope>runtime</scope>-->
</dependency>
测试代码:
class TestOne{
public static void main(String[] args) {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("1234");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String querySql = "select * from t_user";
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(querySql);
mapList.stream().forEach(map -> {
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = map.get(key);
System.out.println("key = " + key + ", value = " + value + ", class" + value.getClass());
}
});
}
}
运行结果:
升级版本:
<!--数据库连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
<!-- <scope>runtime</scope>-->
</dependency>
运行结果: