岁月如哥
人生非梦
posts - 50,comments - 144,trackbacks - 0
使用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

只有注册用户登录后才能发表评论。


网站导航: