使用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就不好说了
posted on 2008-08-30 14:57
岁月如歌 阅读(1483)
评论(0) 编辑 收藏 所属分类:
java