歲月如哥
          人生非夢
          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
          主站蜘蛛池模板: 龙岩市| 嘉禾县| 商都县| 平顺县| 垦利县| 沐川县| 玛曲县| 门源| 海口市| 三亚市| 通河县| 北川| 昌乐县| 平谷区| 会理县| 阳城县| 车致| 济源市| 江华| 佳木斯市| 双辽市| 永州市| 锦屏县| 清徐县| 闸北区| 荔浦县| 武隆县| 尖扎县| 清涧县| 额尔古纳市| 夹江县| 礼泉县| 西宁市| 长白| 宜良县| 息烽县| 阜阳市| 黑山县| 万山特区| 吉水县| 溧阳市|