[坑] SQLDataException Cannot convert
2021/5/3 19:25:19
本文主要是介绍[坑] SQLDataException Cannot convert,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.问题描述
java.sql.SQLDataException: Cannot convert string ‘2021-4-21’ to java.sql.Timestamp value
笔者近期在学习 JDBC
,测试 user
类的实现方法时,由于之前手工注入了几条时间格式不符合规范的数据,导致现在查询报错。
2.解决办法
登陆数据库,单独修改 那几条日期格式异常的数据,提交事务。就修好了。
源码
@Override public List<User> findAll() { String sql = "select username, gender, birthday, mobile from user;"; return template.query(sql, new BeanPropertyRowMapper<>(User.class)); }
测试用例输出
5月 03, 2021 5:32:43 下午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info 信息: {dataSource-1} inited User(username=zhangsan, password=null, gender=M, birthday=2021-04-21, mobile=123456, mail=null) ...
3.其他办法
3.1 添加配置参数
现在是2021年5月,网上搜到 CSDN 解决办法说, jdbc.properties
配置文件添加 url
的参数:自动提交和零时区转换,但我早就这样写了,没效果:
url=jdbc:mysql:///yourdatabase?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull
3.2 添加转换方法
现在是2021年5月,网上搜到 Stack overflow :How to convert java.util.Date to java.sql.Date? 提到,这两个时间库,已经过时了,不要转化他们了。罗列一堆版本更替的图。
但答案区还是有人,直接了当给出的转化写法:
public class MainClass { public static void main(String[] args) { java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); System.out.println("utilDate:" + utilDate); System.out.println("sqlDate:" + sqlDate); } }
我于我尝试在 user
类添加 set
方法。
public void setBirthday(Date birthday) { this.birthday = new java.sql.Date(birthday.getTime()); }
也没效果,因为异常数据,已经定死在数据库了。
不过说明 BeanPropertyRowMapper
运行流程,不走 user
类。
4.避坑指南
- 处理与数据库交互的
dao
时,引用时间类型,应该选择sql
相关的:
import java.sql.Date;
-
其次,写测试用例时,时间格式建议写成能被 SQL 识别的
XXXX-XX-XX
。 -
如果报错,可以根据信息提示,快速定位到数据库,时间格式异常数据,手动修改。
这篇关于[坑] SQLDataException Cannot convert的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版