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查询出来的值类型。

相关推荐
nexttake9 分钟前
5.go-zero集成gorm 和 go-redis
开发语言·后端·golang
我叫张土豆14 分钟前
Neo4j 版本选型与 Java 技术栈深度解析:Spring Data Neo4j vs Java Driver,如何抉择?
java·人工智能·spring·neo4j
Victor35617 分钟前
Redis(84)如何解决Redis的缓存击穿问题?
后端
Victor35618 分钟前
Redis(85)Redis缓存与Memcached缓存有何区别?
后端
lang2015092822 分钟前
Spring环境配置与属性管理完全指南
java·python·spring
lang2015092824 分钟前
Spring Bean作用域全解析
java·后端·spring
忧郁的橙子.28 分钟前
IntelliJ IDEA 2023中为 Spring Boot 项目添加注释模板
java·spring boot·intellij-idea
IT_陈寒29 分钟前
Vue3性能提升30%的秘密:5个90%开发者不知道的组合式API优化技巧
前端·人工智能·后端
秋千码途32 分钟前
Spring的@Cacheable取缓存默认实现
java·spring·缓存
聆风吟º34 分钟前
【Spring Boot 报错已解决】别让端口配置卡壳!Spring Boot “Binding to target failed” 报错解决思路
android·java·spring boot