ShardingSphere报错-java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

2023-11-13


一、场景

1、项目使用ShardingJDBC操作数据库

2、查询SQL执行报错,但将sql复制到navicat中执行,是正常的


二、报错信息

nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
### The error may exist in file [/home/xxx/cloud/tomcat8-ccs-cloud/webapps/multi_channel_cloud_ccs/WEB-INF/classes/mappings/WorkTimeDao.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT recID, workType, workMode, weekIndex, defineDate, startDate, endDate, respondCode, type, vdnId    FROM t_mb_itrWorkOverTime    WHERE vdnId = '1'    ORDER BY workType DESC
### Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

三、排查

刚开始看到报错信息:java.lang.String cannot be cast to java.lang.Integer

1、以为是实体类属性类型与表字段没有对应上,随即对实体类属性类型调整,但依旧报错

2、将SQL映射类型更改为JSONObject【JSONObject是可以自动转换Integer与String的,应该可以解决问题】,依旧报错

3、连JSONObject都无法解决问题,将SQL查询字段写死:SELECT 1 AS vdnId FROM xxx,依旧报错

4、写死查询字段都不行,怀疑SQL语句是不是没有执行。
在SQL上随便添加符号,使SQL根本不成立。执行后依旧报错【懵,不成立的SQL也报错?这时想到,该项目使用的是SharDingJDBC,可能与JDBC有所区别,又看到报错信息:The error occurred while setting parameters,想到:如果不是查询字段的问题,那应该是条件字段的问题】

5、查看条件字段,发现表中对应的字段与实体类中对应的字段,属性类型是一样的,都是Integer类型。这时看到执行该SQL的方法,传递的参数类型是String,正好与报错信息一致。将方法参数类型改为Integer,问题得到解决

注:如果是JBDC链接,参数类型Integer与String是不会有冲突的,可以正常执行


四、原因

1、SQL查询WHERE中字段的字段类型没有对应上,表中的字段类型是Integer,查询时使用的是String


五、解决

更改执行该SQL的方法传递参数的参数类型,与数据库表中对应字段的类型一致

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ShardingSphere报错-java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 的相关文章

随机推荐

  • geckodriver的安装和测试其是否安装成功

    1 首先下载最新的geckodriver 你可以百度 或者我分享给你 但是如果你看到这篇文的时候 已经更新版本了 你可以去百度一下 总有人在分享的 链接 https pan baidu com s 1L9GLCpLNmgL2szxD6wvK
  • 《科学伦理与学术规范》 课后习题_答案 2022春季

    资料来源网络 侵删 科学伦理与学术规范答案汇总 2022 第一部分 必做 ABC A B D ABCD ABC D A BCD C D D 第二部分 必做 ABCD ABCD ABCD BCD AD A ABCD ACD AC A AC D
  • 了解接口工具Apifox

    最近发现一款接口测试工具 apifox 我我们很难将它描述为一款接口管理工具 或 接口自测试工具 官方给了一个简单的公式 更能说明apifox可以做什么 Apifox Postman Swagger Mock JMeter Apifox的特
  • /usr/bin/ld: cannot find -lmysqlcllient

    文章目录 1 question usr bin ld cannot find lmysqlcllient 2 solution 1 question usr bin ld cannot find lmysqlcllient 2 soluti
  • Unity脚本的属性

    参考官网 http game ceeger com Script Attributes Attributes html http blogs unity3d com 2014 06 24 serialization in unity 参考文
  • 解决UE4启动出现UE4Editor.exe-无法找到dll入口的弹窗

    UE4编辑器启动 一开始遇到的问题如下 上网找问题得到的解答都是在cmd下利用regsvr32 exe注册该dll到注册表 但是也提示报错 上网搜了一下 得知原因是生成该dll的源码没有实现 DllRegisterServer和DllUne
  • 镜像iso文件下载地址

    CentOS 7官方下载地址 https www centos org download Centos国内下载源 以下链接均可下载镜像文件 http man linuxde net download CentOS http centos u
  • 面向对象程序设计语言(Java)-1.概述

    概述 1 Java的两层含义 2 Java语言的特点 3 Java的应用平台 4 Java的工作原理 5 Java环境中的概念 6 初始Java程序 7 Java程序的基本组成 8 开发Java程序的步骤 9 注释 1 Java的两层含义
  • JavaScript中的扁平化数据转换为树形结构、树形结构扁平化数据

    1 扁平化数据 gt 树形结构 1 1 第一种数据类型 原始数据只有id和pId相互关联 let data id 639 name 商品管理 type 0 pId 638 code 1 domain id 640 name 商品分类 typ
  • antdv(vue)组件中tree-select使用

    官网教程 组件tree select 实现效果 1 基本用法 直接使用 在vue层写数据 注意 注册组件要包含treeSelect和其中的节点ATreeSelectNode 不注册会报错 如下
  • Oracle常用代码总结

    1 用户 创建用户 create user dm identified by dm default tablespace BIGDATA DM temporary tablespace DM TEMP profile default 修改用
  • Centos7 搭建 Minikube

    Centos7 搭建 Minikube 目录 Centos7 搭建 Minikube 参考博客 运行环境 安装过程 配置系统环境 安装Docker 安装Kubectl 参考博客 参考博客 运行环境 系统版本 CentOS Linux rel
  • Flutter 页面中添加水印、自定义水印

    最近开发手机APP 使用 Fltter 由于需要使用水印的功能 但是第一次接触Flutter 就想着能不能在网上找到现成的使用 结果全是一群复制粘贴的 还卵用没有 不过由于我太机制 直接去官方的 pub get 找到一个插件 嘿嘿 pub
  • 教你统计日留存、周留存、月留存率更准确的方法。

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 什么是留存用户 某段时间内的新增用户 经过一段时间后 仍继续使用应用的被认作是留存用户 这部分用户占当时新增用户的比例即是留存率 统计留存用户的时间粒度有哪些 自然日 包括
  • C/C++宏编程

    C C 宏编程 宏的复杂使用 永远不要写两次 介绍 我读过的所有C C 教科书都批评宏的使用 不要使用它们 它们很危险 因为它们隐藏了你实际写的东西 尤其是看起来很实用的宏 有些人甚至说 没有理由在C 的模板类的发明中使用宏 尽管如此 宏仍
  • centos7 mysql启动失败_RPM方式安装MySQL

    RPM方式安装MySQL 最近浪子尝试使用mycat做MySQL的读写分离和分表分库 因此搭建了几台虚拟机来做操作 话不多说 我们现在centos7上安装MySQL 据说centos7上面直接用yum的方式安装MySQL会失败 那么我就直接
  • 与或非逻辑符号_数电学习之 逻辑电路(1)

    先导 逻辑图的表示 1 与或非 01 02 03 2 扩展 异或 不同为1 相同为0 和同或 相同为1 不同为0 3 复合运算 与非 与后面加一个小圆圈 或非 或后面加一个小圆圈 与或非 两个与输入到或中 或后面加一个小圆圈 4 逻辑公式
  • Qtcreator中来调用python的函数的用法

    以下内容是参考博客 https blog csdn net alxe made article details 83382159 由以上大神的博客作为参考成功实现的 一 先说几点注意的地方 1 就是需要将python的路径在pro中加载进来
  • 和利时系统如何下装服务器,和利时服务器如何将A设置B

    和利时服务器如何将A设置B 内容精选 换一换 系统盘镜像和数据盘镜像为128个 整机镜像为10个 没有限制 可以 支持中国站和国际站的帐号之间共享镜像 但是仅限于中国站和国际站共同拥有的区域 例如 您在中国站的 华北 北京四 的镜像不能共享
  • ShardingSphere报错-java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

    目录 一 场景 二 报错信息 三 排查 四 原因 五 解决 一 场景 1 项目使用ShardingJDBC操作数据库 2 查询SQL执行报错 但将sql复制到navicat中执行 是正常的 二 报错信息 nested exception i