java.sql.SQLFeatureNotSupportedException: getObject with type

基础环境

  • RuoYi v3.8.8(SpringBoot+Vue前后端分离)
  • druid-spring-boot-starter 1.2.23
  • mybatis 3.5.13
  • mybatis-plus-boot-starter 3.5.1
  • sharding-jdbc-core 4.1.1

问题描述

有关问题描述、排查过程、问题原因请移步(注:解决方案没有使用该链接中的,如果你使用连接中的解决方案生效的话,也可以,建议都试试):
Cause: java.sql.SQLFeatureNotSupportedException: getObject with type

IDEA、eclipse更改项目依赖优先编译顺序

解决方案

我使用的解决方案是参考的这篇文章:
shardingJdbc的LocalDateTime问题

但是使用这篇文章中的解决方案并没有完全解决我的问题,重写LocalDateTimeTypeHandler类后再次执行查询操作发现仍然报错:

Caused by: java.lang.ClassCastException: java.time.LocalDateTime cannot be cast to java.sql.Timestamp
	at org.apache.shardingsphere.shardingjdbc.jdbc.core.resultset.ShardingResultSet.getTimestamp(ShardingResultSet.java:251)
	at org.apache.ibatis.type.DateTypeHandler.getNullableResult(DateTypeHandler.java:37)
	at org.apache.ibatis.type.DateTypeHandler.getNullableResult(DateTypeHandler.java:28)
	at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:86)
	... 184 common frames omitted

以上报错是我在一堆报错日志中提取的最下边一段,你会发现,这一次的报错原因是这个
在这里插入图片描述
所以,到这里答案也就很简单了,再把DateTypeHandler类重写一下就是了,下面附上我自己重写的DateTypeHandler类(其实就是根据重写的LocalDateTimeTypeHandler类稍加改动来的)

import cn.hutool.core.convert.Convert;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.springframework.stereotype.Component;

import java.sql.*;
import java.util.Date;

/**
 * 参考LocalDateTimeTypeHandler类写的
 *
 * @author xiaolong
 */

@Component
// 定义转换器支持的JAVA类型
@MappedTypes(Date.class)
// 定义转换器支持的数据库类型以及是否可以处理空值
@MappedJdbcTypes(value = JdbcType.DATE, includeNullJdbcType = true)
public class DateTypeHandler extends BaseTypeHandler<Date> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {
        ps.setObject(i, parameter);
    }

    @Override
    public Date getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return Convert.toDate(rs.getObject(columnName));
    }

    @Override
    public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return Convert.toDate(rs.getObject(columnIndex));
    }

    @Override
    public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return Convert.toDate(cs.getObject(columnIndex));
    }
}

好了,问题完美解决!各位同学有不懂的或者意见建议的,欢迎积极留言,如果我的文章为你解决了问题,还请不要吝啬你点赞的权力哦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值