ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

[坑] SQLDataException Cannot convert

2021-05-03 18:33:52  阅读:1257  来源: 互联网

标签:convert java SQLDataException birthday Cannot 2021 sql Date new


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

  • 如果报错,可以根据信息提示,快速定位到数据库,时间格式异常数据,手动修改。

标签:convert,java,SQLDataException,birthday,Cannot,2021,sql,Date,new
来源: https://blog.csdn.net/amiao_2018/article/details/116378907

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有