2014-11-05 90 views
2

我正在學習OCPJP認證,實際上我在JDBC章節。我知道我可以用兩種方式更新數據庫:第一種方法是使用JDBC API,特別是ResultSet類中的updatexxx方法;第二個是通過execute方法發送一個Statement,以便DBMS自己執行更新。所以,假設我有一個名爲「contacts」的表,並且我想將「phoneNo」字段更新爲「1234567890」,其中「name」字段等於「George」。請注意,我正在使用MySQL。JDBC如何更新數據庫?

ResultSet resultset = statement.executeQuery("SELECT * FROM contacts WHERE name=\"George\""); 
resultset.updateString("phoneNo", "1234567890"); 
updateRow(); 

和這個之間有什麼區別?

statement.executeUpdate("UPDATE contacts SET phoneNo=\"1234567890\" WHERE name=\"George\""); 

什麼時候應該使用第一種方法,何時使用第二種方法?爲什麼我應該選擇其中的一個呢? 謝謝:D

回答

0

這兩個選項都會成功更新您的數據庫。但是你的第二個選項ExecuteUpdate較好,有以下原因:

1)在選項2中,大部分工作是由數據庫服務器,這是最好做,因爲這是數據庫的工作

2 )第一個選項需要從數據庫服務器獲取數據,在Java程序中進行處理,然後發送回數據庫。您正在向數據庫服務器發送多個請求。在第二種選擇中,只有1步。

3)在第一個選項中,您使用的是SELECT * ....,這不是一種好的做法,因爲您正在檢索不必要的數據。你只應該檢索你需要的列,而不是所有的列。一世。ËSELECT PhoneNo

如果你正在編寫以獲得最佳性能的代碼,你應該使用選項2,因爲你正在做一個請求,只有通過有關數據的數據庫服務器

0

基本上你會使用executeUpdate當你有很多的更新,並讓數據庫服務器的工作。如:

statement.executeUpdate("UPDATE products SET price=price*10 WHERE category=100"); 

with updateRow您必須處理程序中的每一行。

反過來,使用updateRow可以更簡單地設置某些列,而且您不必爲了獲得sql update語句而強制進行古怪的字符串操作。


錯誤答案:

如果你看看JDBC API,你會看到很多的接口。如果executeQueryupdate一起使用取決於實施。該API說,對executeUpdate的:

Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

「可能」 而不是 「必須」。所以這取決於數據庫驅動程序實施的質量。如果我沒記錯的話,當在executeQuery中使用update時,MySQL驅動程序會拋出異常。所以你應該在任何情況下使用appropieted。

+0

所以使用一個或的的其他取決於DBMS驅動程序,對吧?無論如何executeQuery返回一個ResultSet(SELECT x FROM y),如果您嘗試執行更新,您將不會有ResultSet,因此拋出異常 – Raffolox 2014-11-05 10:11:51

+0

不,等待D:出現誤解,我沒有試圖執行更新使用executeQuery方法,我試圖找出執行更新使用executeUpdate方法和更新從executeQuery方法獲得的ResultSet之間有什麼區別 – Raffolox 2014-11-05 10:14:27

+0

Raffolox問題是關於「何時使用可更新的ResultSet」,而不是executeQuery ()與executeUpdate()? – 2014-11-05 10:31:23

0

int executeUpdate(String SQL): - 它返回執行SQL語句期間在db中更新的行數。我們可以使用此方法執行SQL查詢,如INSERT,UPDATE或DELETE語句。

ResultSet executeQuery(String SQL): - 它返回一個ResultSet對象。當我們想在db中執行SELECT查詢時,我們可以使用這個方法。

+0

Raffolox的問題是「何時使用可更新的ResultSet」,而不是executeQuery()與executeUpdate()? – 2014-11-05 10:32:10

+0

可更新結果集的要求: 只有特定的SELECT語句 - 簡單訪問單個表 - 才能在逐步遍歷行時更新或刪除行。 – Jayesh 2014-11-05 11:23:59