批量處理JDBC語句提高處理速度
更新時間:2006年10月13日 00:00:00 作者:
有時候JDBC運行得不夠快,這使得有些程序員使用數(shù)據(jù)庫相關的存儲過程。作為一個替代方案,可以試試使用Statement 的批量處理特性看看能否同時執(zhí)行所有的SQL以提高速度。
存儲過程的最簡單的形式就是包含一系列SQL語句的過程,將這些語句放在一起便于在同一個地方管理也可以提高速度。Statement 類可以包含一系列SQL語句,因此允許在同一個數(shù)據(jù)庫事務執(zhí)行所有的那些語句而不是執(zhí)行對數(shù)據(jù)庫的一系列調用。
使用批量處理功能涉及下面的兩個方法:
· addBatch(String) 方法
· executeBatch方法
如果你正在使用Statement 那么addBatch 方法可以接受一個通常的SQL語句,或者如果你在使用PreparedStatement ,那么也可以什么都不向它增加。executeBatch 方法執(zhí)行那些SQL語句并返回一個int值的數(shù)組,這個數(shù)組包含每個語句影響的數(shù)據(jù)的行數(shù)。如果將一個SELECT語句或者其他返回一個ResultSet的SQL語句放入批量處理中就會導致一個SQLException異常。
關于java.sql.Statement 的簡單范例可以是:
Statement stmt = conn.createStatement();
stmt.insert("DELETE FROM Users");
stmt.insert("INSERT INTO Users VALUES("rod", 37, "circle")");
stmt.insert("INSERT INTO Users VALUES("jane", 33, "triangle")");
stmt.insert("INSERT INTO Users VALUES("freddy", 29, "square")");
int[] counts = stmt.executeBatch();
PreparedStatement 有些不同,它只能處理一部分SQL語法,但是可以有很多參數(shù),因此重寫上面的范例的一部分就可以得到下面的結果:
// 注意這里沒有DELETE語句
PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO Users VALUES(?,?,?)"
);
User[ ] users = ...;
for(int i=0; i<users.length; i++) {
stmt.setInt(1, users[i].getName());
stmt.setInt(2, users[i].getAge());
stmt.setInt(3, users[i].getShape());
stmt.addBatch( );
}
int[ ] counts = stmt.executeBatch();
如果你不知道你的語句要運行多少次,那么這是一個很好的處理SQL代碼的方法。在不使用批量處理的情況下,如果添加50個用戶,那么性能就有影響,如果某個人寫了一個腳本添加一萬個用戶,程序可能變得很糟糕。添加批處理功能就可以幫助提高性能,而且在后面的那種情況下代碼的可讀性也更好。
您可能感興趣的文章:
相關文章
JSP隱含對象response實現(xiàn)文件下載的兩種方法
JSP隱含對象response實現(xiàn)文件下載的兩種方式,二進制文件的下載與文本文件下載2014-09-09詳解Struts2中Action訪問Servlet API的幾種方法
這篇文章主要介紹了詳解Struts2中Action訪問Servlet API的幾種方法的相關資料,這里提供三種方法,一般推薦使用,IOC方式,需要的朋友可以參考下2017-08-08jsp+servlet實現(xiàn)最簡單的增刪改查代碼分享
本文主要分享了jsp+servlet實現(xiàn)的最簡單的增刪改查代碼。代碼清晰明了,具有很好的參考價值,需要的朋友一起來看下吧2016-12-12搭建Eclipse+MyEclipse開發(fā)環(huán)境
搭建Eclipse+MyEclipse開發(fā)環(huán)境...2007-02-02