軟件測試開(kāi)發(fā)技術(shù)SQL Server 2005 數據庫批量更新解決辦法 SQL Server 數據庫
關(guān)鍵字:SQL Server 2005 數據庫
這些天因為有數據割接的需求,于是有要寫(xiě)關(guān)于批量更新的程序。我們的數據庫使用的是SQLSERVER2005,碰到了一些問(wèn)題來(lái)分享下。
首先注意Statement 和PreparedStatement的問(wèn)題
Statement sm = cn.createStatement(); sm.addBatch(sql1); sm.addBatch(sql2); ... sm.executeBatch()
用Statement的好處就是每次可以直接傳一個(gè)SQL語(yǔ)句進(jìn)去,不用管那么多?墒窃跀祿勘容^大的時(shí)候,應該會(huì )對效率有影響。不建議使用。
PreparedStatement ps = cn.preparedStatement(sql); { ps.setXXX(1,xxx); ... ps.addBatch(); } ps.executeBatch();
PreparedStatement是會(huì )預編譯的,只要一條SQL,不斷動(dòng)態(tài)設值,然后addBatch(),在數據量大的時(shí)候比較好,非常建議使用。
還有就是JDBC的驅動(dòng)問(wèn)題,很多同志可能還是在用2000的驅動(dòng)呢,沒(méi)有用批量更新的程序沒(méi)有多大問(wèn)題,可是一旦用了批量更新,出現很多問(wèn)題,
反正數據庫很卡,慢。還可以更新不了哦。
我強烈建議大家更新JDBC驅動(dòng)。
但是如果出現
SQLServerException: sp_cursoropen/sp_cursorprepare: 該語(yǔ)句參數只能是一個(gè)批或帶有單個(gè) SELECT 語(yǔ)句的存儲過(guò)程,且不帶 FOR BROWSE、COMPUTE BY 或變量賦值。
應該就是JDBC的版本問(wèn)題,1.0的驅動(dòng)有這個(gè)問(wèn)題,好像不支持批量更新,我建議大家使用1.2
我測試過(guò)了,完全沒(méi)有問(wèn)題!
提供一些數據連接參數
jdbc.driverClassName:com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url:jdbc:sqlserver://127.0.0.1:1444;databaseName=fax;selectMethod=cursor;
我上傳了1.2的驅動(dòng) 點(diǎn)擊下載
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/