俺这个半路出家的和尚,不懂spring 如何配置,不懂 ibatis 如何配置,也不懂 strut 如何配置,就是照着以存在的程序做点小程序。
今天有个应用,大概是说:如果不存在对应的记录,就插入一条,如果存在就 更新一下。
Oracle 里,可以有 MERGE INTO ... 来写,但是MySQL里,就不知道怎么弄了。
于是想到了存储过程,
但是执行后,出错了!
烦请各路大侠出手帮个忙。谢谢。
IBATIS 版本:2.0.7
MySql 版本:5.1.22
JDBC : mysql-connector-java-5.1.5-bin
存储过程定义:
复制内容到剪贴板
代码:
CREATE PROCEDURE P_PUB_COMMISSION_I_U (IN IN_PUB_ID INT , IN IN_COMMISSION_TYPE INT, IN IN_REV_SHARE_RATE DOUBLE, IN IN_CPM DOUBLE)
BEGIN
DECLARE N INT;
SELECT COUNT(1) INTO N FROM pub_commission WHERE PUB_ID = IN_PUB_ID;
IF(N > 0) THEN
UPDATE pub_commission SET
COMMISSION_TYPE = IN_COMMISSION_TYPE,
REV_SHARE_RATE = IN_REV_SHARE_RATE,
CPM = IN_CPM
WHERE PUB_ID = IN_PUB_ID;
ELSE
INSERT pub_commission
(PUB_ID,COMMISSION_TYPE,REV_SHARE_RATE,CPM) VALUES
(IN_PUB_ID , IN_COMMISSION_TYPE , IN_REV_SHARE_RATE , IN_CPM );
END IF;
END;SQLMap定义:
复制内容到剪贴板
代码:
<parameterMap id="addOrUpdatePubCommissionParameterMap" class="java.util.Map">
<parameter property="pubId" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN" />
<parameter property="commissionType" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN" />
<parameter property="revShareRate" jdbcType="DOUBLE" javaType="java.lang.Double" mode="IN" />
<parameter property="cpm" jdbcType="DOUBLE" javaType="java.lang.Double" mode="IN" />
</parameterMap>
<procedure id="addOrUpdatePubCommission" parameterMap="addOrUpdatePubCommissionParameterMap">
{CALL P_PUB_COMMISSION_I_U( ? , ? , ? , ? )}
</procedure> Java 调用:
复制内容到剪贴板
代码:
public void addOrUpdatePubCommission(PubForm pubForm) {
PubCommissionVO vo = pubForm.getPubBO().getPubCommissionVO();
Map map = new HashMap(4);
map.put("pubId",vo.getPubId());
map.put("commissionType",vo.getCommissionType());
map.put("revShareRate",vo.getRevShareRate());
map.put("cpm",vo.getCpm());
pubDAO.addOrUpdatePubCommission(map);
}
}运行提示错误:
复制内容到剪贴板
代码:
SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [S1C00]; error code [0];
--- The error occurred in cms/module/pub/dao/map/pubDAO.xml.
--- The error occurred while executing query procedure.
--- Check the {CALL P_PUB_COMMISSION_I_U( ? , ? , ? , ? )}.
--- Check the SQL Statement (preparation failed).
--- Cause: java.sql.SQLException: Callable statments not supported.; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in cms/module/pub/dao/map/pubDAO.xml.
--- The error occurred while executing query procedure.
--- Check the {CALL P_PUB_COMMISSION_I_U( ? , ? , ? , ? )}.
--- Check the SQL Statement (preparation failed).
--- Cause: java.sql.SQLException: Callable statments not supported.