命名sql使用sum( $field$ )动态统计总数,执行报错

本文解决通过命名SQL动态统计Platform7.6系统表cap_user列值总数时出现的错误。提供两种调整命名SQL的方法,并附带示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅读原文

【问题描述】

想通过命名sql,动态统计Platform7.6系统表cap_user对应列值的总数,执行出错

命名sql:

<sqlMap>    

<select id="select_id" parameterClass="java.util.Map" resultClass="commonj.sdo.DataObject">      

select sum( $field$ ) from cap_user    

</select>

</sqlMap>

调用命名sql的逻辑流,param为java.util.HashMap类型

报错信息:

Caused by: com.primeton.das.sql.impl.ibatis.common.jdbc.exception.NestedSQLException:  

--- The error occurred in C:\primeton\platform76\apache-tomcat-7.0.54\webapps\default\WEB-INF\_srv\work\user\com.primeton.eos.demo\com\primeton\eos\demo\newnamingsql.namingsql.  --- The error occurred while applying a result map. 

--- Check the com.primeton.eos.demo.newnamingsql.select_id-AutoResultMap. 

--- Check the result mapping for the 'SUM(OPERATOR_ID)' property. 

--- Cause: com.primeton.ext.data.xpath.IllegalXPathException: has illegal literal 'SUM(OPERATOR_ID)' in xpath 'SUM(OPERATOR_ID)'.  at com.primeton.das.sql.impl.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:263)  at com.primeton.das.sql.impl.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:166)  at com.primeton.das.sql.impl.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:634)  

...... Caused by: com.primeton.ext.data.xpath.IllegalXPathException: has illegal literal 'SUM(OPERATOR_ID)' in xpath 'SUM(OPERATOR_ID)'.

 

【解决方案】

问题原因:因为sum( $field$ )的返回结果根据resultClass映射出错,可参考如下两种方式调整命名sql,demo见附件:

1】<sqlMap>    

<select id="select_id" parameterClass="java.util.HashMap" resultClass="commonj.sdo.DataObject">      

select sum($field$) as 'total' from cap_user    

</select>

</sqlMap>

2】<sqlMap>    

<select id="select_id" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">      

select sum($field$) from cap_user    

</select>

</sqlMap>

 

demo.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值