歲月如哥
          人生非夢
          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 歲月如歌 閱讀(1498) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 马龙县| 南开区| 郯城县| 博野县| 轮台县| 新沂市| 安徽省| 汕头市| 荆州市| 开化县| 金平| 彝良县| 江津市| 德化县| 黄龙县| 建始县| 汽车| 乐昌市| 澳门| 福建省| 诸暨市| 六枝特区| 长泰县| 呈贡县| 西华县| 礼泉县| 西宁市| 襄汾县| 长泰县| 九龙坡区| 台中市| 沧州市| 乌兰浩特市| 镇坪县| 邢台市| 志丹县| 安龙县| 义马市| 句容市| 文成县| 孟村|