• java.sql.SQLFeatureNotSupportedException问题原因及解决方法


    闲着没事想写个demo,结果运行时候报这个错误

    一开始是以为类型转换错误,我在实体类里面的create_time 对应的是LocalDateTime类型,于是尝试利用mybatis的自定义类型转换解决问题, 代码是这样子的

    package com.example.demo.mybatisConfig;

    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.time.Instant;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.ZonedDateTime;
    import java.util.Date;

    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.TypeHandler;

    public class DateTimeTypeHandler implements TypeHandler{

    /**
    * 保存时LocalDate转换为Date
    */
    @Override
    public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
    LocalDateTime localDateTime = (LocalDateTime)parameter;
    ZoneId zoneId = ZoneId.systemDefault();
    ZonedDateTime zdt = localDateTime.atZone(zoneId);
    //LocalDate转换成util.Date
    Date date = Date.from(zdt.toInstant());
    //util.date转换成sql.date
    java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    ps.setDate(i,sqlDate);
    }

    /**
    * 查询结果Date转换成LocalDateTime
    */
    @Override
    public Object getResult(ResultSet rs, String columnName) throws SQLException {
    java.sql.Date sqlDate = rs.getDate(columnName);
    Date date = new Date(sqlDate.getTime()) ;
    Instant instant = date.toInstant();
    ZoneId zoneId = ZoneId.systemDefault();
    // atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。
    LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
    return localDateTime;
    }

    /**
    * 查询结果Date转换成LocalDateTime
    */
    @Override
    public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
    java.sql.Date sqlDate = rs.getDate(columnIndex);
    Date date = new Date(sqlDate.getTime()) ;
    Instant instant = date.toInstant();
    ZoneId zoneId = ZoneId.systemDefault();
    LocalDateTime localDate = instant.atZone(zoneId).toLocalDateTime();
    return localDate;
    }

    @Override
    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
    java.sql.Date sqlDate = cs.getDate(columnIndex);
    Date date = new Date(sqlDate.getTime()) ;
    Instant instant = date.toInstant();
    ZoneId zoneId = ZoneId.systemDefault();
    LocalDateTime localDate = instant.atZone(zoneId).toLocalDateTime();
    return localDate;
    }

    }
    写完这个自定义类型转换的时候,信心满满的点击运行,结果发现还是报同样的错误,于是我打断点进行调试,发现都没有进入类型转换类里面,于是再次思考解决方法,百度问题原因,大致知道是连接驱动问题,要求驱动必须大于4.2版本,于是查看自己的连接驱动

    当我把druid的版本设置为1.1.18的时候,奇迹发生了,没有报错,程序正常运行,

    然后再次尝试使用Springboot自带的MySQL驱动时,发现也没有报错,因此当出现这个错误的时候第一时间请先查看自己的数据库驱动版本是不是太低了.

  • 相关阅读:
    C#读写设置修改调整UVC摄像头画面-曝光
    C#读写调整修改设置UVC摄像头画面-逆光对比
    C#读写修改设置调整UVC摄像头画面-清晰度
    C#读写设置修改调整UVC摄像头画面-对比度
    C#读写调整设置UVC摄像头画面-亮度
    C#采集UVC摄像头画面并支持旋转和分辨率切换
    一张图看懂SharpCamera
    C#混音同时录制采集声卡和麦克风话筒
    C#采集麦克风话筒声音
    Windows下安装Redis服务
  • 原文地址:https://www.cnblogs.com/cfas/p/16001612.html
Copyright © 2020-2023  润新知