feng

          飄逸~~~~~life

          SQL Server 2005 批量更新解決辦法

          這些天因為有數據割接的需求,于是有要寫關于批量更新的程序。我們的數據庫使用的是SQLSERVER2005,碰到了一些問題來分享下。
          首先注意Statement PreparedStatement的問題
          Statement sm = cn.createStatement();
          sm.addBatch(sql1);
          sm.addBatch(sql2);
          ...
          sm.executeBatch()

           用Statement的好處就是每次可以直接傳一個SQL語句進去,不用管那么多。可是在數據量比較大的時候,應該會對效率有影響。不建議使用。
          PreparedStatement ps = cn.preparedStatement(sql);
          {
           ps.setXXX(1,xxx);
           ...
           ps.addBatch();
          }
          ps.executeBatch();
          PreparedStatement是會預編譯的,只要一條SQL,不斷動態設值,然后addBatch(),在數據量大的時候比較好,非常建議使用。
          還有就是JDBC的驅動問題,很多同志可能還是在用2000的驅動呢,沒有用批量更新的程序沒有多大問題,可是一旦用了批量更新,出現很多問題,
          反正數據庫很卡,慢。還可以更新不了哦。
          我強烈建議大家更新JDBC驅動。
          但是如果出現
          SQLServerException: sp_cursoropen/sp_cursorprepare: 該語句參數只能是一個批或帶有單個 SELECT 語句的存儲過程,且不帶 FOR BROWSE、COMPUTE BY 或變量賦值。
          應該就是JDBC的版本問題,1.0的驅動有這個問題,好像不支持批量更新,我建議大家使用1.2
          我測試過了,完全沒有問題!
          提供一些數據連接參數
          jdbc.driverClassName:com.microsoft.sqlserver.jdbc.SQLServerDriver
          jdbc.url:jdbc:sqlserver://127.0.0.1:1444;databaseName=fax;selectMethod=cursor;

          我上傳了1.2的驅動
          點這里直接下載

          posted on 2009-04-09 11:09 feng 閱讀(1826) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 儋州市| 江口县| 鄂托克旗| 禹城市| 河津市| 电白县| 沁水县| 武安市| 灵石县| 轮台县| 金川县| 黄梅县| 绥化市| 东兰县| 北安市| 安龙县| 衡南县| 保德县| 麻江县| 维西| 浦城县| 广南县| 佳木斯市| 宁远县| 隆德县| 苏尼特左旗| 略阳县| 城市| 建昌县| 肇东市| 屏南县| 龙岩市| 进贤县| 阜阳市| 无棣县| 漠河县| 博乐市| 北碚区| 进贤县| 介休市| 奎屯市|