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)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 昂仁县| 兴业县| 乐平市| 六安市| 绥芬河市| 屯留县| 龙门县| 措勤县| 洛南县| 江都市| 石狮市| 静安区| 奉化市| 芮城县| 通州区| 汾西县| 乌兰县| 永宁县| 怀柔区| 加查县| 沅陵县| 枣庄市| 晋江市| 建昌县| 漾濞| 通海县| 常德市| 将乐县| 正蓝旗| 改则县| 衢州市| 普洱| 孝感市| 东光县| 阳朔县| 崇信县| 呼图壁县| 富裕县| 博爱县| 尼木县| 新民市|