ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Error querying database. Cause: java.lang.NumberFormatException: For i
[打印本页]
作者:
科技颠覆者
时间:
2024-7-16 09:29
标题:
Error querying database. Cause: java.lang.NumberFormatException: For i
报错原因:
### Error querying database. Cause: java.lang.NumberFormatException: For input string: "N"
### Cause: java.lang.NumberFormatException: For input string: "N"
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy121.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:139)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:76)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy144.queryContractByCar(Unknown Source)
at com.sinosoft.app.project.contract.service.QueryContractService.getContractList(QueryContractService.java:201)
at com.sinosoft.app.project.contract.service.QueryContractService.queryContract(QueryContractService.java:287)
at com.sinosoft.app.project.contract.api.impl.ContractQueryApiService.queryContract(ContractQueryApiService.java:55)
复制代码
报错的sql语句 : 单引号+单字符会被解析成char类型,而不是String类型,以是会报NumberFormatException的错误
修改后的sql语句: 采用双引号+单字符的格式
问题出现原因:
问题的原因在于mybiatis是基于OGNL语法,在解析
单引号+单字符 'Y'
的解析时会默认时char类型,
单引号+多字符 'AA'
或者
双引号+单字符 "A"
解析为String类型。以是上面的报错也很好理解了, NumberFormatException 在将字符转换成数字时报错。
MyBatis 利用
OGNL
(Object-Graph Navigation Language)作为其表达式语言,用于在 XML 映射文件中编写动态 SQL 查询和映射规则。在解析
单引号+单字符(
'Y') 时,默认解析为 char 类型的原因是因为在 Java 中,单引号括起来的字符常量被以为是 char 类型的值。
详细来说,单引号括起来的内容 'Y' 在 Java 中会被表明为一个 char 类型的值,而不是 String 类型。这是 Java 语言本身的特性,也是 MyBatis 在解析 OGNL 表达式时遵循的规则。
另一方面,当利用
单引号+多字符
('AA') 或者
双引号+单字符(
"A") 时,这会被表明为 String 类型的值,因为
单引号+多字符
或者
双引号+单字符
在 Java 中被视为字符串常量。
因此,MyBatis 遵循了 Java 语言对于单引号和双引号的表明规则,以便更好地处置惩罚表达式中不同类型的常量值。这种设计使得在编写动态 SQL 查询时可以或许更加机动地处置惩罚不同类型的常量,同时与 Java 语言保持划一。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4