Error attempting to get column ‘xxx‘ from result set. Cause: java.sql.SQLDataException错误的解决方法

文章目录

  • [1. 复现错误](#1. 复现错误)
  • [2. 分析错误](#2. 分析错误)
  • [3. 解决错误](#3. 解决错误)
  • [4. 文末总结](#4. 文末总结)

1. 复现错误

今天写好导入hive表的详情列表的接口,如下代码所示:

java 复制代码
  /**
   * hive表导入的回调接口
   *
   * @author super先生
   * @datetime 2023/3/20:16:32
   * @return
   */
  @ResponseBody
  @GetMapping(value = "/xxx/importTables/detail")
  public ServiceStatusData localHiveImportTablesDetail(
          @RequestParam("datasetId") Long datasetId) {
    logger.info("mock数据的入参记录:datasetId={}", datasetId);
    if (null == datasetId) {
      return new ServiceStatusData(ServiceStatusData.Status.Fail, "入参错误:缺少任务id", null);
    }
    return hiveImportTaskService.localHiveImportTablesDetail(datasetId);
  }

启动postman访问该接口,确报出如下错误:

Error attempting to get column 'missionId' from result set. Cause: java.sql.SQLDataException: Cannot determine value type from string 'missionMockId'\n; SQL []; Cannot determine value type from string 'missionMockId'; nested exception is java.sql.SQLDataException: Cannot determine value type from string 'missionMockId'

2. 分析错误

根据java.sql.SQLDataException可知,这是sql数据的错误异常。

其次,再将错误信息Error attempting to get column 'missionId' from result set,翻译成中文是尝试从结果集中获取列"missionId"时出错

为什么尝试从结果集中获取列"missionId"时出错呢?继续分析错误信息。

接着将错误信息Cannot determine value type from string 'missionMockId',翻译成中文是无法从字符串"missionMockId"确定值类型

为什么无法确定missionMockId值类型呢?在Navicat中执行hiveImportTaskMapper.xml中的sql语句,如下代码所示:

sql 复制代码
<select id="listByDatasetId" parameterType="java.lang.Long" resultType="com.xxx.HiveTableDetailVo">
 SELECT
	hit.id AS id,
	du.user_name AS username,
	hit.user_id AS userId,
	hit.dataset_id AS datasetId,
	hit.mission_id AS missionId,
	hit.mission_state AS missionState,
	date_format( hit.create_time, '%Y-%m-%d %H:%I:%s' ) AS createTime,
	date_format( hit.call_back_time, '%Y-%m-%d %H:%I:%s' ) AS callbackTime,
	hit.import_result AS remark
 FROM
	hive_import_task hit
	LEFT JOIN `user` du ON du.user_id = hit.user_id
 WHERE
	dataset_id = #{datasetId}
 order by hit.create_time desc
    </select>

将上述代码中的#{datasetId}替换成实际值2后,执行结果如下图所示:

从上图中,可以很清楚地看到missionId的值为missionMockId,这是字符串类型的。

接着分析hiveImportTaskMapper.xml中的select标签中的返回类型(resultType),即是HiveTableDetailVo类:

HiveTableDetailVo代码如下所示:

java 复制代码
/**
* @author super先生
* @datetime 2023/3/23 14:21
* @desc 导入hive表的详情列表
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class HiveTableDetailVo {
	 private Long id;
	 private String username;
	 private Long userId;
	 private Long datasetId;
	 private Long missionId;
	 private String missionState;
	 private String createTime;
	 private String callbackTime;
	 private String remark;
}

HiveTableDetailVo类中,可以清晰地看到missionId的类型是Long,而mysql查询出的missionId值为missionMockId,即字符串类型。

总结错误原因为:HiveTableDetailVo类中定义missionId的类型和mysql查询出的missionId值类型不一致,故而sql报出无法确定missionId值类型。

3. 解决错误

既然HiveTableDetailVo类中定义missionId的类型和mysql查询出的missionId值类型不一致,那就修改?HiveTableDetailVo类中定义missionId的类型为String,如下代码所示:

java 复制代码
/**
* @author super先生
* @datetime 2023/3/23 14:21
* @desc 导入hive表的详情列表
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class HiveTableDetailVo {
	 private Long id;
	 private String username;
	 private Long userId;
	 private Long datasetId;
	 private String missionId;
	 private String missionState;
	 private String createTime;
	 private String callbackTime;
	 private String remark;
}

重新启动项目,再次使用postman测试,方可成功运行,如下图所示:

4. 文末总结

通过Error attempting to get column 'missionId' from result set. Cause: java.sql.SQLDataException: Cannot determine value type from string 'missionMockId'错误的分析与解决可知,一般报出类似错误的原因如下:

实体类的属性类型同mysql查询出来的值类型不一致导致的。

解决方法就是修改实体类的属性类型,来适配mysql查询出来的值类型。

相关推荐
Lee川3 小时前
面试通关:JWT 认证与双 Token 机制深度解析
后端·面试
想学习java初学者6 小时前
SpringBoot整合Vertx-Mqtt多租户(优化版)
java·spring boot·后端
AC赳赳老秦6 小时前
政企内网落地:OpenClaw 离线环境深度适配方案,无外网场景下本地化模型对接与全功能使用
java·大数据·运维·python·自动化·deepseek·openclaw
weixin_449173656 小时前
在 Java 中,‌线程安全的 List‌ 主要有以下几种实现方式,它们的效率取决于具体的使用场景(尤其是读写比例):
java·线程安全的list
念何架构之路6 小时前
MySql常见ORM
数据库·mysql
平凡码工人6 小时前
navicat 17 lite 安装教程
mysql
砚底藏山河6 小时前
股票数据API接口:如何获取股票历历史分时KDJ数据
java·python·maven
Csvn6 小时前
Python 性能优化与 Profiling 工具
后端·python
不减20斤不改头像7 小时前
手机一句话开发贪吃蛇!TRAE SOLO 移动端 AI 编程实测
前端·后端
明月_清风7 小时前
K8s 从入门到上手:核心概念+常用工具全解析
后端·kubernetes