博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis异常:java.lang.NumberFormatException: For input string: "S"
阅读量:4617 次
发布时间:2019-06-09

本文共 3076 字,大约阅读时间需要 10 分钟。

MyBatis异常日志如下:

Caused by: java.lang.NumberFormatException: For input string: "S"    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)    at java.lang.Double.parseDouble(Double.java:538)    at org.apache.ibatis.ognl.OgnlOps.doubleValue(OgnlOps.java:243)    at org.apache.ibatis.ognl.OgnlOps.compareWithConversion(OgnlOps.java:100)    at org.apache.ibatis.ognl.OgnlOps.isEqual(OgnlOps.java:143)    at org.apache.ibatis.ognl.OgnlOps.equal(OgnlOps.java:802)    at org.apache.ibatis.ognl.ASTEq.getValueBody(ASTEq.java:52)    at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)    at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)    at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:470)    at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:434)    at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:44)    at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)    at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)    at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)    at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:35)    at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)    at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)    at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)    at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:41)    at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:292)    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)    at com.shengpay.hpsplus.db.interceptor.SlowSqlInterceptor.intercept(SlowSqlInterceptor.java:47)    at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)    at com.sun.proxy.$Proxy185.query(Unknown Source)    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)    ... 45 more

 

将mybatis的日志级别调整为debug仍然没有看到sql打印,因此排除sql异常,可能是sql预处理报错了。

 

仔细排查异常,原来是如下地方有问题:

and INSERT_TIME > sysdate - 1

错误分析:

1、test=“datatype == ‘F’ ” 使用的OGNL表达式,而datatype的类型定义如下:

该地方想表达的含义是:如果datatype == 字符'F'的条件成立

但是呢,DB中字段的定义是char,可是,在我们使用(test=“datatype == ‘F’ ”)这个ognl表达式做判断的时候,使用的是datatype,而datatype是如何定义的呢?

private String dataType;

问题找到了:

(test=“datatype == ‘F’ ”) 这个表达式,使用了datatype 这个字符串'F'这个字符做比较,字符和字符串比较,mybatis会做数据类型的统一转换,好了出问题了!!!

解决方案,吧'F'当做字符串对待,用双引号标示:"F"

 

and INSERT_TIME > sysdate - 1

 

搞定!!!

 

 

转载于:https://www.cnblogs.com/huahua035/p/8880222.html

你可能感兴趣的文章
jQuery中事件绑定与解绑
查看>>
js原生Ajax的封装与使用
查看>>
一种公众号回复关键词机制
查看>>
基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
查看>>
nyist oj 138 找球号(二)(hash 表+位运算)
查看>>
ytu 1910:字符统计(水题)
查看>>
201671030110 姜佳宇 实验三作业互评与改进
查看>>
python的沙盒环境--virtualenv
查看>>
软件自动化测试——入门、进阶与实战
查看>>
BZOJ1878 [SDOI2009]HH的项链 树状数组 或 莫队
查看>>
BZOJ3675 [Apio2014]序列分割 动态规划 斜率优化
查看>>
2016.10.24 继续学习
查看>>
产品功能对标 - 服务授权管理
查看>>
各地IT薪资待遇讨论
查看>>
splay入门
查看>>
带CookieContainer进行post
查看>>
C语言学习笔记--字符串
查看>>
CSS-上下文选择器
查看>>
ionic repeat 重复最后一个时要执行某个函数
查看>>
1.初识代码审计-基础
查看>>