一个存储过程执行一半莫名退出的解决(zz)

使用java定时调用存储过程,存储过程的功能是修改表A中字段F  is null的记录,设置字段F=X,正常执行是执行一次后表A中将不会有F is null的记录, 问题是:每次执行都只修改了表A的2或3条记录

而这个存储过程在 数据客户端 工具中直接执行是正确的。

解决方法
如果你的存储过程中包括insert、delete、update操作,切记:
(1)如果是 jdbc调用,使用statement.executeUpdate("sp_xxxx"),千万不能使用statement.execute("sp_xxxx")
(2)如果使用spring的dao框架:使用jdbcDao.getJDBCTemplate.update("sp_xxxx"),同样不要使用jdbcDao.getJDBCTemplate.execute("sp_xxxx")


三期开发中也遇到了类似的问题

案件从在审库转未立库的时候,存储过程执行了一半就退出了,查了好久,幸好在这里找到答案了:)
之前我们一直这么用
String procedure  =   " {call K_FY..PR_ZS2WL_ "   +  getAJLBShortName(iAjlb)  +   " (?) } " ;
getJdbcDAO().getJdbcTemplate().execute(
      procedure, 
new  CallableStatementCallback() {
                
public  Object doInCallableStatement(CallableStatement cstmt)
                        
throws  SQLException, DataAccessException {
                                        cstmt.setLong(
1 , lAjbh);
                                        cstmt.execute();
                                        
return   null ;
                                     }
      });

我把 cstmt.execute();改成 cstmt.executeUpdate();之后就可以了
但是奇怪的是 案件从在审库转到审结库的时候确是正常执行,没有任何 异常迹象
ps:在审转未立和在审转审结这两个存储过程的结构是一样的,有很多insert、update和delete的操作


这个是在sybase下发生的问题。jdbc的标准虽然是那么定的--execute()中调用了executeUpdate(),但sybase实现的com.sybase.jdbc3.jdbc.SybDriver就不好说了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值