1. 程式人生 > >execute(),executeQuery(),executeUpdate()和executeBatch()的使用與區別

execute(),executeQuery(),executeUpdate()和executeBatch()的使用與區別

在開發過程中,我們常需要對資料庫進行操作,就避免不了執行各種sql語句,就會遇到execute(),executeQuery()和executeUpdate()這個三個執行sql語句的方法,如果使用不當,就會導致我們執行報錯,如:update語句需要executeUpdate()方法來執行,如果你選擇使用了executeQuery(),系統就會提示錯誤,執行失敗。當我們對sql語句進行批量處理的時候,就會用到executeBatch()方法。
Statement 介面提供了三種執行 SQL 語句的方法:executeQuery、executeUpdate和 execute。專案工程中要選擇哪個要根據實際的Sql語句來進行選擇。

一、execute()方法:
用來執行返回多個結果集的sql語句,即當執行某個已儲存過程或動態執行未知 SQL 字串(即應用程式程式設計師在編譯時未知)時,有可能出現多個結果的情況。
假定已知某個過程返回兩個結果集,則在使用方法 execute 執行該過程後,必須呼叫方法 getResultSet 獲得第一個結果集,然後呼叫適當的 getXXX 方法獲取其中的值。要獲得第二個結果集,需要先呼叫 getMoreResults 方法,然後再呼叫 getResultSet 方法。
如果已知某個過程返回兩個更新計數,則首先呼叫方法 getUpdateCount,然後呼叫 getMoreResults,並再次呼叫 getUpdateCount。對於不知道返回內容,則情況更為複雜。如果結果是 ResultSet 物件,則方法 execute 返回 true;如果結果是 Java int,則返回 false。如果返回 int,則意味著結果是更新計數或執行的語句是 DDL 命令。在呼叫方法 execute 之後要做的第一件事情是呼叫 getResultSet 或 getUpdateCount。呼叫方法 getResultSet 可以獲得兩個或多個 ResultSet 物件中第一個物件;或呼叫方法 getUpdateCount 可以獲得兩個或多個更新計數中第一個更新計數的內容。
這裡寫圖片描述


二、executeQuery()方法:
用於產生單個結果集的語句,例如 SELECT 語句。 被使用最多的執行 SQL 語句的方法是 executeQuery。如果執行儲存過程將產生大於 1 的更新計數,或生成多個結果集,則請使用 execute 方法執行儲存過程。

三、executeUpdate():
用於執行 INSERT、UPDATE 、 DELETE 語句或不返回任何內容的 SQL 語句,如: SQL DDL(資料定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。executeUpdate 將返回在 MERGE 操作中更新的正確行數。
executeUpdate()注重及時性,每寫一條sql語句就傳送給資料庫儲存起來,沒有快取,這樣頻繁操作資料庫效率非常低。
注意:
addBatch()和executeUpdate()是用來執行資料插入的,不同就是一個批量,一個單個插入,兩者不要在一起使用。
這裡寫圖片描述

四、executeBatch():
向資料庫提交要執行的一批命令。如果所有命令都成功執行,則返回一個更新計數陣列。executeBatch 方法由 java.sql.Statement 介面中的 executeBatch 方法指定。向資料庫提交命令後,此方法將清除批中的所有命令。
通常是通過先使用addBatch()來快取資料,將多條sql語句快取起來,再通過executeBatch()方法一次性發給資料庫,提高執行效率。
注意:
使用addBatch()快取資料時要在迴圈中設定條件,當迴圈達到指定次數後執行executeBatch(),將快取中的sql全部發給資料庫,然後執行clearBatch()清楚快取,否則資料過大是會出現OutOfMemory(記憶體不足)。