Error attempting to get column ‘create_time‘ from result set. Cause: java.sql.SQLFeatureNotSupported

本文介绍了在SpringBoot应用中集成MyBatisPlus遇到的错误,当数据库表的create_time字段为DateTime类型,而MP升级至3.1.1及以上版本使用LocalDateTime时,与Druid 1.1.21之前的版本不兼容。解决方法包括升级Druid到最新版本、保持MP3.1.0版本或更换数据源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot + MyBatisPlus 报错:

Error attempting to get column ‘create_time’ from result set. Cause: java.sql.SQLFeatureNotSupported.

MP官方解决方案

问题原因:

数据库表的create_time类型为DateTime,而Java中createTime的属性的类型是LocalDateTime,这是Java8里面新出来了一些API,LocalDate、LocalTime、LocalDateTime ,但是在Druid1.1.21 版本 数据源里面不支持Java8的时间、日期类型。

MP3.1.0之前版本没问题,针对3.1.1以及后续版本出现上述问题

现象: 集成druid数据源,使用3.1.0之前版本没问题,升级mp到3.1.1+后,运行时报错:java.sql.SQLFeatureNotSupportedException

原因: mp3.1.1+使用了新版jdbc,LocalDateTime等新日期类型处理方式升级,但druid在1.1.21版本之前不支持,参考issue

解决方案:

  1. 升级druid到1.1.21解决这个问题;
  2. 保持mp版本3.1.0;
  3. 紧跟mp版本,换掉druid数据源
  4. 修改LocalDateTime为date类型
### Java SQL操作中的`SQLFeatureNotSupportedException` 当尝试获取名为 `lastupdatetime` 的列数据时抛出了 `java.sql.SQLFeatureNotSupportedException` 异常,这通常意味着所使用的 JDBC 驱动程序不支持某些特定的功能或方法调用。对于此情况的一种常见解释是在较旧版本的数据库驱动中访问未实现的方法[^1]。 为了处理这个问题,可以采取几种不同的策略: #### 使用兼容性更好的JDBC驱动 确保正在使用最新版的JDBC驱动来连接目标数据库。新版本往往修复了许多已知的问题并增加了对更多特性的支持。如果可能的话,升级到最新的稳定版本可能会解决问题。 #### 替代API的选择 有时可以通过其他方式绕过不受支持的操作。例如,在读取元数据之前先确认该功能是否被支持: ```java if (resultSet.getMetaData().getColumnType(columnIndex) != java.sql.Types.TIMESTAMP){ throw new UnsupportedOperationException("Column type not supported"); } Timestamp timestamp = resultSet.getTimestamp("lastupdatetime"); ``` 这段代码首先检查了列的数据类型是不是时间戳(`TIMESTAMP`),如果不是,则提前报错而不是等待底层抛出更难理解的异常。 #### 自定义ResultSetWrapper类 创建一个自定义的结果集包装器可以在一定程度上缓解此类问题的影响。通过拦截原始结果集中引发异常的方法调用,并提供自己的实现逻辑,从而避免触发原生异常。 ```java public class CustomResultSet extends Wrapper implements ResultSet { private final ResultSet rs; public CustomResultSet(ResultSet rs) throws SQLException{ super(); this.rs = rs; } @Override public boolean next() throws SQLException { return rs.next(); } // Override other methods as needed... @Override public Timestamp getTimestamp(String columnName) throws SQLException { try { return rs.getTimestamp(columnName); } catch(SQLFeatureNotSupportedException e){ // Handle exception here or provide fallback behavior. System.out.println("Caught unsupported feature."); return null; // Or some default value. } } } ``` 上述解决方案提供了三种不同层次上的应对措施:更新依赖库、调整应用程序内部逻辑以及构建额外抽象层以增强灵活性和健壮性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值