在批量更新SQL操作的時候建議使用addBatch,這樣效率是高些,數據量越大越能體現出來
Statement接口里有兩個方法:
void addBatch(String sql)
將給定的 SQL 命令添加到此 Statement 對象的當前命令列表中。通過調用方法 executeBatch 可以批量執行此列表中的命令。
int[] executeBatch()
將一批命令提交給數據庫來執行,如果全部命令執行成功,則返回更新計數組成的數組。
返回:
包含批中每個命令的一個元素的更新計數所組成的數組(數組中的每個元素為:成功處理了命令后,執行命令所影響數據庫中行數的更新計數)。數組的元素根據將命令添加到批中的順序排序。
PreparedStatement接口里:重寫了addBatch()的方法,executeBatch()並沒有重寫
void addBatch() <注意:PreparedStatement的addBatch( )沒有參數的>
將一組參數添加到此 PreparedStatement 對象的批處理命令中。
PreparedStatement.addbatch()的使用:
JDBC批量更新pstmt.addBatch();的問題
在數據量越大的時候 越能體現addBatch()的優勢
因為數據庫的處理速度是非常驚人的 單次吞吐量很大 執行效率極高
addBatch()把若干sql語句裝載到一起,然后一次送到數據庫執行,執行需要很短的時間
而pstmt.executeUpdate() 是一條一條發往數據庫執行的 時間都消耗在數據庫連接的傳輸上面
舉個例子可以幫助理解:
我這有一台超大功率的面粉加工機,前者相當於 把所有農戶袋裝的麥子收集起來用卡車一次送往加工廠 后者相當於農戶排好隊用同樣的卡車一人一人的往加工廠送麥子 麥子加工5分鍾完成,但是每個人到工廠就得3小時,我數據庫執行效率再高也沒用,時間都耗在傳輸的路上了!!
這就出現了數據傳輸的性能瓶頸 addBatch就是為解決這樣的問題而產生的!
Statement和PreparedStatement的區別就不多廢話了,直接說PreparedStatement最重要的addbatch()結構的使用.
1.建立鏈接,(打電話撥號 )
Connection connection =getConnection();
2.不自動 Commit (瓜子不是一個一個吃,全部剝開放桌子上,然后一口舔了)
connection.setAutoCommit(false);
3.預編譯SQL語句,只編譯一回哦,效率高啊.(發明一個剝瓜子的方法,以后不要總想怎么剝瓜子好.就這樣剝.)
PreparedStatement statement = connection.prepareStatement(“INSERT INTO TABLEX VALUES(?, ?)”);
4.來一個剝一個,然后放桌子上
//記錄1
statement.setInt(1, 1);
statement.setString(2, “Cujo”);
statement.addBatch();//把這條執行語句加到PreparedStatement對象的批處理命令中
//記錄2
statement.setInt(1, 2);
statement.setString(2, “Fred”);
statement.addBatch();//把這條執行語句加到PreparedStatement對象的批處理命令中
//記錄3
statement.setInt(1, 3);
statement.setString(2, “Mark”);
statement.addBatch(); //把這條執行語句加到PreparedStatement對象的批處理命令中
//批量執行上面3條語句. 一口吞了,很爽
int [] counts = statement.executeBatch();//把以上添加到批處理命令中的所有命令一次過提交給數據庫來執行
//Commit it 咽下去,到肚子(DB)里面
connection.commit();
關於兩個prepareStatement方法的區別:兩者都是創建一個 PreparedStatement 對象來將參數化的 SQL 語句發送到數據庫,區別僅僅在於,第二個PreparedStatement 對象有個ResultSet getGeneratedKeys();方法可以返回執行Statement對象而創建的任何自動生成的鍵(主要是自增的鍵)的結果集
PreparedStatement
prepareStatement(String sql)
創建一個 PreparedStatement 對象來將參數化的 SQL 語句發送到數據庫。
PreparedStatement
prepareStatement(String sql,int autoGeneratedKeys)
創建一個默認 PreparedStatement 對象,該對象能獲取自動生成的鍵。