ibatis 配置sql抛出异常

zhuyuge0 2014-12-05 09:32:53
真的无语了,
DAO:
@Override
public List<ShopDynamicData> queryBatchForAllByMod(int totalNum, int modVal, int offset, int pageSize) {
Map<String, Object> param = new HashMap<String, Object>(4);
param.put("totalNum", totalNum);
param.put("modVal", modVal);
param.put("offset", offset);
param.put("pageSize", pageSize);

return (List<ShopDynamicData>) daoSupportMysql.queryForList(NAMESPACE + ".queryBatchForAllByMod", param);
}


DAO所对应的ibatis xml配置:
<select id="queryBatchForAllByMod" parameterClass="Map" resultClass="ShopDynamicData">
select
seller_id as sellerId,
new_time as newTime,
last_sell_time as lastSellTime
from seller_dynamic_info
where mod(id,#totalNum#)=#modVal#
limit #offset#, #pageSize#
</select>

每次执行到该方法的时候都会抛出异常,堆栈是这样的:
org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in dal/sqlmap/sqlmap-uac-seller-dynamic-info-mysql.xml.
--- The error occurred while applying a parameter map.
--- Check the SellerDynamicInfo.queryBatchForAllByMod-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: 分析sql错误,错误的sql是: select seller_id as sellerId, new_time as newTime, last_sell_time as lastSellTime from seller_dynamic_info where mod(id,?)=? limit ?, ? ; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in dal/sqlmap/sqlmap-uac-seller-dynamic-info-mysql.xml.
--- The error occurred while applying a parameter map.
--- Check the SellerDynamicInfo.queryBatchForAllByMod-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: 分析sql错误,错误的sql是: select seller_id as sellerId, new_time as newTime, last_sell_time as lastSellTime from seller_dynamic_info where mod(id,?)=? limit ?, ?
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:212)
at org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:249)
at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:296)
at com.taobao.trade.jstorm.activityhb.dal.dao.uac.impl.SellerDynamicInfoDAOImpl.queryBatchForAllByMod(SellerDynamicInfoDAOImpl.java:36)
at com.taobao.trade.jstorm.activityhb.MyTest.scanTableAndStoreTairTest(MyTest.java:225)
at com.taobao.trade.jstorm.activityhb.MyTest.main(MyTest.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:121)
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in dal/sqlmap/sqlmap-uac-seller-dynamic-info-mysql.xml.
--- The error occurred while applying a parameter map.
--- Check the SellerDynamicInfo.queryBatchForAllByMod-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: 分析sql错误,错误的sql是: select seller_id as sellerId, new_time as newTime, last_sell_time as lastSellTime from seller_dynamic_info where mod(id,?)=? limit ?, ?
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:204)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:567)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:541)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:298)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209)
... 10 more
Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: 分析sql错误,错误的sql是: select seller_id as sellerId, new_time as newTime, last_sell_time as lastSellTime from seller_dynamic_info where mod(id,?)=? limit ?, ?
at com.taobao.tddl.parser.SQLParserImp.nestedParseSql(SQLParserImp.java:103)
at com.taobao.tddl.parser.SQLParserImp.parseSQL(SQLParserImp.java:68)
at com.taobao.tddl.parser.SQLParserImp.parse(SQLParserImp.java:311)
at com.taobao.tddl.client.handler.SqlParseHandler.parse(SqlParseHandler.java:59)
at com.taobao.tddl.client.handler.SqlParseHandler.handleDown(SqlParseHandler.java:37)
at com.taobao.tddl.client.pipeline.DefaultPipeline$DefaultHandlerContext.handleDown(DefaultPipeline.java:449)
at com.taobao.tddl.client.pipeline.DefaultPipeline$DefaultHandlerContext.flowNext(DefaultPipeline.java:445)
at com.taobao.tddl.client.pipeline.DefaultPipeline$DefaultHandlerContext.handleDown(DefaultPipeline.java:450)
at com.taobao.tddl.client.pipeline.DefaultPipeline.startFlow(DefaultPipeline.java:97)
at com.taobao.tddl.client.pipeline.bootstrap.PipelineBootstrap.bootstrap0(PipelineBootstrap.java:273)
at com.taobao.tddl.client.pipeline.bootstrap.PipelineBootstrap.bootstrap0(PipelineBootstrap.java:208)
at com.taobao.tddl.client.pipeline.bootstrap.PipelineBootstrap.bootstrap(PipelineBootstrap.java:60)
at com.taobao.tddl.client.jdbc.TStatementImp.buildSqlExecutionContextUsePipeline(TStatementImp.java:717)
at com.taobao.tddl.client.jdbc.TStatementImp.executeQueryInternal(TStatementImp.java:581)
at com.taobao.tddl.client.jdbc.TPreparedStatementImp.executeQuery(TPreparedStatementImp.java:94)
at com.taobao.tddl.client.jdbc.TPreparedStatementImp.execute(TPreparedStatementImp.java:80)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:185)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteQuery(MappedStatement.java:221)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:189)
... 16 more
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: 分析sql错误,错误的sql是: select seller_id as sellerId, new_time as newTime, last_sell_time as lastSellTime from seller_dynamic_info where mod(id,?)=? limit ?, ?
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)

425783 [2014-12-05 21:27:51] [] DEBUG md5.MD5 - [hash]d8a431a990d9cbf90a1c9840bf18862e
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at com.taobao.tddl.parser.SQLParserImp.nestedParseSql(SQLParserImp.java:101)
... 34 more
Caused by: java.lang.RuntimeException: 分析sql错误,错误的sql是: select seller_id as sellerId, new_time as newTime, last_sell_time as lastSellTime from seller_dynamic_info where mod(id,?)=? limit ?, ?
at com.taobao.tddl.parser.SQLParserImp.getDMLCommonObject(SQLParserImp.java:181)
at com.taobao.tddl.parser.SQLParserImp.access$000(SQLParserImp.java:50)
at com.taobao.tddl.parser.SQLParserImp$1.call(SQLParserImp.java:82)
at com.taobao.tddl.parser.SQLParserImp$1.call(SQLParserImp.java:80)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at com.taobao.tddl.parser.SQLParserImp.nestedParseSql(SQLParserImp.java:96)
... 34 more
...全文
482 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
runnersun 2016-09-04
  • 打赏
  • 举报
回复
可以先将sql放在mysql客户端上执行,看是否有语法问题或能否执行成功,在调试ibatis,需打印出要执行的全部sql语句
技术控_ 2016-09-02
  • 打赏
  • 举报
回复
mybatis 不是都用parameterType 跟resultType了吗 ?
wuyukunbi 2016-09-02
  • 打赏
  • 举报
回复
引用 3 楼 Inhibitory 的回复:
[quote=引用 1 楼 qq467339640 的回复:] ibatis是这样写的? where mod(id,#totalNum#)=#modVal# limit #offset#, #pageSize#可以? 我记得是这样写的嘛#{totalNum} 要有花括号的嘛
#{totalNum} 我记得自从接触iBatis也是这么写的,在MyBatis也是这样,没用过#xxx#这样的,不知道有没问题[/quote] iBatis#aa#,$aa$,MyBatis#{aa},${aa}
___d 2016-09-01
  • 打赏
  • 举报
回复
先用sql跑一下啊 看是不是sql问题
不写代码的钦 2016-09-01
  • 打赏
  • 举报
回复
xml中#totalNum#这样子写没问题. sql有问题吧,sql拿出来,改成标准sql,肯定没法执行
zhangdeing 2016-09-01
  • 打赏
  • 举报
回复
...看看学习下
SoldierShen_ 2014-12-14
  • 打赏
  • 举报
回复
先排除sql是否有问题 控制台里的sql,把?替换为合理的数字,在数据库跑跑看,能否正常抽.
whlusha720 2014-12-08
  • 打赏
  • 举报
回复
你下载资源过于频繁,请输入验证码
咖啡加糖_ 2014-12-08
  • 打赏
  • 举报
回复
看了下,应该是mod(id,xx)这里出错,首先这个id是什么??? 然后它是什么类型的,int???还是其他???
  • 打赏
  • 举报
回复
引用 5 楼 sum_rain 的回复:
[quote=引用 4 楼 zhuyuge0 的回复:] [quote=引用 3 楼 Inhibitory 的回复:] [quote=引用 1 楼 qq467339640 的回复:] ibatis是这样写的? where mod(id,#totalNum#)=#modVal# limit #offset#, #pageSize#可以? 我记得是这样写的嘛#{totalNum} 要有花括号的嘛
#{totalNum} 我记得自从接触iBatis也是这么写的,在MyBatis也是这样,没用过#xxx#这样的,不知道有没问题[/quote]这样写肯定没问题,因为我把where mod(id, #totalNum)=#modVal#改成where mod(id,4)=0也同样报错的[/quote] 请问 mod(id,4)这种表达是什么意思?是sql的语法吗?不懂,求教[/quote] 这是内置函数 就是 取余的意思
zhuyuge0 2014-12-06
  • 打赏
  • 举报
回复
引用 3 楼 Inhibitory 的回复:
[quote=引用 1 楼 qq467339640 的回复:] ibatis是这样写的? where mod(id,#totalNum#)=#modVal# limit #offset#, #pageSize#可以? 我记得是这样写的嘛#{totalNum} 要有花括号的嘛
#{totalNum} 我记得自从接触iBatis也是这么写的,在MyBatis也是这样,没用过#xxx#这样的,不知道有没问题[/quote]这样写肯定没问题,因为我把where mod(id, #totalNum)=#modVal#改成where mod(id,4)=0也同样报错的
zhuyuge0 2014-12-06
  • 打赏
  • 举报
回复
引用 1 楼 qq467339640 的回复:
ibatis是这样写的? where mod(id,#totalNum#)=#modVal# limit #offset#, #pageSize#可以? 我记得是这样写的嘛#{totalNum} 要有花括号的嘛
这些写没错啊,,,,,
Inhibitory 2014-12-06
  • 打赏
  • 举报
回复
引用 1 楼 qq467339640 的回复:
ibatis是这样写的? where mod(id,#totalNum#)=#modVal# limit #offset#, #pageSize#可以? 我记得是这样写的嘛#{totalNum} 要有花括号的嘛
#{totalNum} 我记得自从接触iBatis也是这么写的,在MyBatis也是这样,没用过#xxx#这样的,不知道有没问题
AceShot 2014-12-06
  • 打赏
  • 举报
回复
引用 4 楼 zhuyuge0 的回复:
[quote=引用 3 楼 Inhibitory 的回复:] [quote=引用 1 楼 qq467339640 的回复:] ibatis是这样写的? where mod(id,#totalNum#)=#modVal# limit #offset#, #pageSize#可以? 我记得是这样写的嘛#{totalNum} 要有花括号的嘛
#{totalNum} 我记得自从接触iBatis也是这么写的,在MyBatis也是这样,没用过#xxx#这样的,不知道有没问题[/quote]这样写肯定没问题,因为我把where mod(id, #totalNum)=#modVal#改成where mod(id,4)=0也同样报错的[/quote] 请问 mod(id,4)这种表达是什么意思?是sql的语法吗?不懂,求教
浪里花 2014-12-05
  • 打赏
  • 举报
回复
ibatis是这样写的? where mod(id,#totalNum#)=#modVal# limit #offset#, #pageSize#可以? 我记得是这样写的嘛#{totalNum} 要有花括号的嘛

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧