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 閱讀(1830) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 茂名市| 古交市| 黄石市| 永川市| 沅江市| 寿宁县| 台安县| 枣强县| 玉环县| 万盛区| 射洪县| 阿鲁科尔沁旗| 阿拉善右旗| 和硕县| 民县| 全州县| 纳雍县| 广安市| 旺苍县| 蒙阴县| 夏邑县| 沾化县| 宁武县| 墨玉县| 砚山县| 冷水江市| 西安市| 汶川县| 潮安县| 施秉县| 德格县| 福建省| 周宁县| 万盛区| 永靖县| 乌海市| 广宁县| 凭祥市| 南溪县| 项城市| 邛崃市|