sql2005 批量更新問(wèn)題的解決方法
更新時(shí)間:2010年03月13日 12:39:40 作者:
這些天因?yàn)橛袛?shù)據(jù)割接的需求,于是有要寫(xiě)關(guān)于批量更新的程序。我們的數(shù)據(jù)庫(kù)使用的是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ù)據(jù)量比較大的時(shí)候,應(yīng)該會(huì)對(duì)效率有影響。不建議使用。
PreparedStatement ps = cn.preparedStatement(sql);
{
ps.setXXX(1,xxx);
...
ps.addBatch();
}
ps.executeBatch();
PreparedStatement是會(huì)預(yù)編譯的,只要一條SQL,不斷動(dòng)態(tài)設(shè)值,然后addBatch(),在數(shù)據(jù)量大的時(shí)候比較好,非常建議使用。
還有就是JDBC的驅(qū)動(dòng)問(wèn)題,很多同志可能還是在用2000的驅(qū)動(dòng)呢,沒(méi)有用批量更新的程序沒(méi)有多大問(wèn)題,可是一旦用了批量更新,出現(xiàn)很多問(wèn)題,
反正數(shù)據(jù)庫(kù)很卡,慢。還可以更新不了哦。
我強(qiáng)烈建議大家更新JDBC驅(qū)動(dòng)。
但是如果出現(xiàn)
SQLServerException: sp_cursoropen/sp_cursorprepare: 該語(yǔ)句參數(shù)只能是一個(gè)批或帶有單個(gè) SELECT 語(yǔ)句的存儲(chǔ)過(guò)程,且不帶 FOR BROWSE、COMPUTE BY 或變量賦值。
應(yīng)該就是JDBC的版本問(wèn)題,1.0的驅(qū)動(dòng)有這個(gè)問(wèn)題,好像不支持批量更新,我建議大家使用1.2
我測(cè)試過(guò)了,完全沒(méi)有問(wèn)題!
提供一些數(shù)據(jù)連接參數(shù)
jdbc.driverClassName:com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url:jdbc:sqlserver://127.0.0.1:1444;databaseName=fax;selectMethod=cursor;
Statement sm = cn.createStatement();
sm.addBatch(sql1);
sm.addBatch(sql2);
...
sm.executeBatch()
用Statement的好處就是每次可以直接傳一個(gè)SQL語(yǔ)句進(jìn)去,不用管那么多??墒窃跀?shù)據(jù)量比較大的時(shí)候,應(yīng)該會(huì)對(duì)效率有影響。不建議使用。
PreparedStatement ps = cn.preparedStatement(sql);
{
ps.setXXX(1,xxx);
...
ps.addBatch();
}
ps.executeBatch();
PreparedStatement是會(huì)預(yù)編譯的,只要一條SQL,不斷動(dòng)態(tài)設(shè)值,然后addBatch(),在數(shù)據(jù)量大的時(shí)候比較好,非常建議使用。
還有就是JDBC的驅(qū)動(dòng)問(wèn)題,很多同志可能還是在用2000的驅(qū)動(dòng)呢,沒(méi)有用批量更新的程序沒(méi)有多大問(wèn)題,可是一旦用了批量更新,出現(xiàn)很多問(wèn)題,
反正數(shù)據(jù)庫(kù)很卡,慢。還可以更新不了哦。
我強(qiáng)烈建議大家更新JDBC驅(qū)動(dòng)。
但是如果出現(xiàn)
SQLServerException: sp_cursoropen/sp_cursorprepare: 該語(yǔ)句參數(shù)只能是一個(gè)批或帶有單個(gè) SELECT 語(yǔ)句的存儲(chǔ)過(guò)程,且不帶 FOR BROWSE、COMPUTE BY 或變量賦值。
應(yīng)該就是JDBC的版本問(wèn)題,1.0的驅(qū)動(dòng)有這個(gè)問(wèn)題,好像不支持批量更新,我建議大家使用1.2
我測(cè)試過(guò)了,完全沒(méi)有問(wèn)題!
提供一些數(shù)據(jù)連接參數(shù)
jdbc.driverClassName:com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url:jdbc:sqlserver://127.0.0.1:1444;databaseName=fax;selectMethod=cursor;
相關(guān)文章
安裝SqlServer2005時(shí)版本變更檢查 (警告)
在安裝SqlServer2005時(shí)遇到“版本變更檢查 (警告) ”問(wèn)題導(dǎo)致安裝失敗,警告提示如下:版本變更檢查 (警告)2014-07-07SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(3)
利用ROW_NUMBER()進(jìn)行高效率的分頁(yè)。2010-02-02SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(2)
SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(2)2010-02-02sql server 2005中使用with實(shí)現(xiàn)遞歸的方法
這篇文章介紹了sql server 2005中使用with實(shí)現(xiàn)遞歸的方法,有需要的朋友可以參考一下2013-09-09快速將珊瑚蟲(chóng)IP數(shù)據(jù)庫(kù)轉(zhuǎn)MS SQL2005的圖文教程
在幻想曲BLOG上看到不少朋友說(shuō),最近服務(wù)器上的IP數(shù)據(jù)好像不是很準(zhǔn)確,于是重新做了一個(gè)新的,不少朋友可能需要這個(gè)數(shù)據(jù)庫(kù),因?yàn)槲募蟮木壒?,所以直接提供快速轉(zhuǎn)換方法。2008-08-08SQLServer 2005 控制用戶權(quán)限訪問(wèn)表圖文教程
SQL Server權(quán)限管理很簡(jiǎn)單的一小塊,有些地方并沒(méi)有深入理解和講述,只是希望對(duì)一些剛?cè)腴T(mén)的童鞋有幫助,其它大俠就當(dāng)是:我當(dāng)堂嚇一跳,然后得啖笑。2011-07-07一個(gè)刪除指定表的所有索引和統(tǒng)計(jì)的過(guò)程
sql2005 一個(gè)刪除指定表的所有索引和統(tǒng)計(jì)的過(guò)程2009-09-09