mysql数据库访问,遇到Cannot convert java.time.LocalDateTime to java.util.Date的问题

mysql数据库访问,遇到Cannot convert java.time.LocalDateTime to java.util.Date的问题

问题描述:

之前一直正常运行的代码,遇上Date类型转换错误。
环境:tomcat9.0.46/mysql 8.0.26/jdk1.8.0_301
组件:dbutils1.7 mysql-connector-java8.0.26
Manager类

public class Manager {
    private static final int entityId=7;
    private Integer managerId;
    private Integer departmentId;
    private String departmentName;
    private String managerName;
    private String loginName;
    private String password;
    private Boolean allowLogin;
    private Date pwdUpdateTime;
        //setter getter不贴了
}

manager表

+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| managerId     | int         | NO   | PRI | NULL    | auto_increment |
| managerName   | varchar(30) | NO   | UNI | NULL    |                |
| departmentId  | int         | YES  | MUL | NULL    |                |
| loginName     | varchar(20) | NO   |     | NULL    |                |
| password      | varchar(64) | NO   |     | NULL    |                |
| allowLogin    | tinyint(1)  | NO   |     | 0       |                |
| pwdUpdateTime | datetime    | YES  |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+

用户验证代码

public Manager getManagerByLoginNameAndPassword(String loginName, String password) throws SQLException {
        QueryRunner qr=JdbcPool.getQueryRunner();
                String sql="select managerId,managerName,loginName,allowLogin,pwdUpdateTime 
                            from manager where loginName=? and password =sha2(?,256)";
        return qr.query(sql, new BeanHandler<Manager>(Manager.class),loginName,password);
    }

出错代码

java.sql.SQLException: Cannot set pwdUpdateTime: incompatible types, cannot convert java.time.LocalDateTime to java.util.Date Query: select managerId,managerName,loginName,allowLogin,pwdUpdateTime from manager where loginName=? and password =sha2(?,256) Parameters: [zhangsan , 123456]
    at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:527)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:391)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:329)
        。。。。。。。。。。

请各位指导,谢谢!

8.0的驱动得在连接上加时区的

把mysql-connector-java8.0.26换成8.0.21版,问题消失,难道是26版会将datatime转换成java.time.LocalDateTime,而21版转换成java.util.Date?有没有哪位遇到这个问题?

manager第10行,把Date换成java.time.LocalDateTime

本来就不行啊,类不同。可以通过millingtime 转化,重新构造一个java.sql.datetime类