1、你好,區(qū)別如下:Statement 接口提供了三種執(zhí)行 SQL 語句的方法:executeQuery、executeUpdate 和 execute。
2、使用哪一個方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。
(資料圖片)
3、 方法executeQuery 用于產(chǎn)生單個結(jié)果集的語句,例如 SELECT 語句。
4、 被使用最多的執(zhí)行 SQL 語句的方法是 executeQuery。
5、這個方法被用來執(zhí)行 SELECT 語句,它幾乎是使用最多的 SQL 語句。
6、 方法executeUpdate 用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。
7、INSERT、UPDATE 或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。
8、executeUpdate 的返回值是一個整數(shù),指示受影響的行數(shù)(即更新計數(shù))。
9、對于 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。
10、 使用executeUpdate方法是因為在 createTableCoffees 中的 SQL 語句是 DDL (數(shù)據(jù)定義語言)語句。
11、創(chuàng)建表,改變表,刪除表都是 DDL 語句的例子,要用 executeUpdate 方法來執(zhí)行。
12、你也可以從它的名字里看出,方法 executeUpdate 也被用于執(zhí)行更新表 SQL 語句。
13、實際上,相對于創(chuàng)建表來說,executeUpdate 用于更新表的時間更多,因為表只需要創(chuàng)建一次,但經(jīng)常被更新。
14、 方法execute: 用于執(zhí)行返回多個結(jié)果集、多個更新計數(shù)或二者組合的語句。
15、因為多數(shù)程序員不會需要該高級功能 execute方法應(yīng)該僅在語句能返回多個ResultSet對象、多個更新計數(shù)或ResultSet對象與更新計數(shù)的組合時使用。
16、當(dāng)執(zhí)行某個已存儲過程 或動態(tài)執(zhí)行未知 SQL 字符串(即應(yīng)用程序程序員在編譯時未知)時,有可能出現(xiàn)多個結(jié)果的情況,盡管這種情況很少見。
17、 因為方法 execute 處理非常規(guī)情況,所以獲取其結(jié)果需要一些特殊處理并不足為怪。
18、例如,假定已知某個過程返回兩個結(jié)果集,則在使用方法 execute 執(zhí)行該過程后,必須調(diào)用方法 getResultSet 獲得第一個結(jié)果集,然后調(diào)用適當(dāng)?shù)?getXXX 方法獲取其中的值。
19、要獲得第二個結(jié)果集,需要先調(diào)用 getMoreResults 方法,然后再調(diào)用 getResultSet 方法。
20、如果已知某個過程返回兩個更新計數(shù),則首先調(diào)用方法 getUpdateCount,然后調(diào)用 getMoreResults,并再次調(diào)用 getUpdateCount。
21、 對于不知道返回內(nèi)容,則情況更為復(fù)雜。
22、如果結(jié)果是 ResultSet 對象,則方法 execute 返回 true;如果結(jié)果是 Java int,則返回 false。
23、如果返回 int,則意味著結(jié)果是更新計數(shù)或執(zhí)行的語句是 DDL 命令。
24、在調(diào)用方法 execute 之后要做的第一件事情是調(diào)用 getResultSet 或 getUpdateCount。
25、調(diào)用方法 getResultSet 可以獲得兩個或多個 ResultSet 對象中第一個對象;或調(diào)用方法 getUpdateCount 可以獲得兩個或多個更新計數(shù)中第一個更新計數(shù)的內(nèi)容。
26、 當(dāng) SQL 語句的結(jié)果不是結(jié)果集時,則方法 getResultSet 將返回 null。
27、這可能意味著結(jié)果是一個更新計數(shù)或沒有其它結(jié)果。
28、在這種情況下,判斷 null 真正含義的唯一方法是調(diào)用方法 getUpdateCount,它將返回一個整數(shù)。
29、這個整數(shù)為調(diào)用語句所影響的行數(shù);如果為 -1 則表示結(jié)果是結(jié)果集或沒有結(jié)果。
30、如果方法 getResultSet 已返回 null(表示結(jié)果不是 ResultSet 對象),則返回值 -1 表示沒有其它結(jié)果。
31、也就是說,當(dāng)下列條件為真時表示沒有結(jié)果(或沒有其它結(jié)果): ((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1)) 如果已經(jīng)調(diào)用方法 getResultSet 并處理了它返回的 ResultSet 對象,則有必要調(diào)用方法 getMoreResults 以確定是否有其它結(jié)果集或更新計數(shù)。
32、如果 getMoreResults 返回 true,則需要再次調(diào)用 getResultSet 來檢索下一個結(jié)果集。
33、如上所述,如果 getResultSet 返回 null,則需要調(diào)用 getUpdateCount 來檢查 null 是表示結(jié)果為更新計數(shù)還是表示沒有其它結(jié)果。
34、 當(dāng) getMoreResults 返回 false 時,它表示該 SQL 語句返回一個更新計數(shù)或沒有其它結(jié)果。
35、因此需要調(diào)用方法 getUpdateCount 來檢查它是哪一種情況。
36、在這種情況下,當(dāng)下列條件為真時表示沒有其它結(jié)果: ((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1)) 下面的代碼演示了一種方法用來確認(rèn)已訪問調(diào)用方法 execute 所產(chǎn)生的全部結(jié)果集和更新計數(shù): stmt.execute(queryStringWithUnknownResults); while (true) { int rowCount = stmt.getUpdateCount(); if (rowCount >0) { // 它是更新計數(shù) System.out.println("Rows changed = " + count); stmt.getMoreResults(); continue; } if (rowCount == 0) { // DDL 命令或 0 個更新 System.out.println(" No rows changed or statement was DDL command"); stmt.getMoreResults(); continue; } // 執(zhí)行到這里,證明有一個結(jié)果集 // 或沒有其它結(jié)果 ResultSet rs = stmt.getResultSet; if (rs != null) { . . . // 使用元數(shù)據(jù)獲得關(guān)于結(jié)果集列的信息 while (rs.next()) { . . . // 處理結(jié)果 stmt.getMoreResults(); continue; } break; // 沒有其它結(jié)果主要區(qū)別:execute:執(zhí)行給定的 SQL 語句,該語句可能返回多個結(jié)果。
37、executeUpdate:執(zhí)行給定 SQL 語句,該語句可能為 INSERT、UPDATE 或 DELETE 語句,或者不返回任何內(nèi)容的 SQL 語句(如 SQL DDL 語句)一、方法executeUpdate:用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句。
38、executeUpdate 的返回值是一個整數(shù),指示受影響的行數(shù)(即更新計數(shù))。
39、對于 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。
40、?2、使用executeUpdate方法是因為在 createTableCoffees 中的 SQL 語句是 DDL (數(shù)據(jù)定義語言)語句。
41、創(chuàng)建表,改變表,刪除表都是 DDL 語句的例子,要用 executeUpdate 方法來執(zhí)行。
42、你也可以從它的名字里看出,方法 executeUpdate 也被用于執(zhí)行更新表 SQL 語句。
43、二、方法execute:?用于執(zhí)行返回多個結(jié)果集、多個更新計數(shù)或二者組合的語句。
44、因為多數(shù)程序員不會需要該高級功能 。
45、2、execute方法應(yīng)該僅在語句能返回多個ResultSet對象、多個更新計數(shù)或ResultSet對象與更新計數(shù)的組合時使用。
46、當(dāng)執(zhí)行某個已存儲過程 或動態(tài)執(zhí)行未知 SQL 字符串(即應(yīng)用程序程序員在編譯時未知)時,有可能出現(xiàn)多個結(jié)果的情況,盡管這種情況很少見。
47、Statement 接口提供了三種執(zhí)行 SQL 語句的方法:executeQuery、executeUpdate 和 execute。
48、使用哪一個方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。
49、方法executeUpdate 用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。
50、INSERT、UPDATE 或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。
51、executeUpdate 的返回值是一個整數(shù)(int),指示受影響的行數(shù)(即更新計數(shù))。
52、對于 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。
53、 如: //加載數(shù)據(jù)庫驅(qū)動 Class.forName("com.mysql.jdbc.Driver"); //使用DriverManager獲取數(shù)據(jù)庫連接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234"); //使用Connection來創(chuàng)建一個Statment對象 Statement ?stmt = conn.createStatement();//執(zhí)行DML語句,返回受影響的記錄條數(shù) return stmt.executeUpdate(sql);>方法execute: 可用于執(zhí)行任何SQL語句,返回一個boolean值,表明執(zhí)行該SQL語句是否返回了ResultSet。
54、如果執(zhí)行后第一個結(jié)果是ResultSet,則返回true,否則返回false。
55、但它執(zhí)行SQL語句時比較麻煩,通常我們沒有必要使用execute方法來執(zhí)行SQL語句,而是使用executeQuery或executeUpdate更適合,但如果在不清楚SQL語句的類型時則只能使用execute方法來執(zhí)行該SQL語句了。
56、 如: ?//加載驅(qū)動 Class.forName(driver); //獲取數(shù)據(jù)庫連接 conn = DriverManager.getConnection(url , user , pass);//使用Connection來創(chuàng)建一個Statment對象 stmt = conn.createStatement(); //執(zhí)行SQL,返回boolean值表示是否包含ResultSetboolean hasResultSet = stmt.execute(sql);//如果執(zhí)行后有ResultSet結(jié)果集 if (hasResultSet) { //獲取結(jié)果集 rs = stmt.getResultSet(); //ResultSetMetaData是用于分析結(jié)果集的元數(shù)據(jù)接口ResultSetMetaData rsmd = rs.getMetaData();int columnCount = rsmd.getColumnCount(); //迭代輸出ResultSet對象 while (rs.next()) {//依次輸出每列的值 for (int i = 0 ; i < columnCount ; i++ ) { System.out.print(rs.getString(i + 1) + "/t");} System.out.print("/n"); }} else{ System.out.println("該SQL語句影響的記錄有" + stmt.getUpdateCount() + "條");}兩者區(qū)別具體表現(xiàn):execute方法執(zhí)行返回的都是布爾值。
57、executeupdate返回的都是int整數(shù)類型。
58、execute方法在執(zhí)行SQL語句的時候比較麻煩,而executeupdate比較方便。
59、Statement 接口提供了三種執(zhí)行 SQL 語句的方法:executeQuery、executeUpdate 和 execute。
60、使用哪一個方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。
61、 方法executeQuery 用于產(chǎn)生單個結(jié)果集的語句,例如 SELECT 語句。
62、 被使用最多的執(zhí)行 SQL 語句的方法是 executeQuery。
63、這個方法被用來執(zhí)行 SELECT 語句,它幾乎是使用最多的 SQL 語句。
64、 方法executeUpdate 用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。
65、INSERT、UPDATE 或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。
66、executeUpdate 的返回值是一個整數(shù),指示受影響的行數(shù)(即更新計數(shù))。
67、對于 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。
68、 使用executeUpdate方法是因為在 createTableCoffees 中的 SQL 語句是 DDL (數(shù)據(jù)定義語言)語句。
69、創(chuàng)建表,改變表,刪除表都是 DDL 語句的例子,要用 executeUpdate 方法來執(zhí)行。
70、你也可以從它的名字里看出,方法 executeUpdate 也被用于執(zhí)行更新表 SQL 語句。
71、實際上,相對于創(chuàng)建表來說,executeUpdate 用于更新表的時間更多,因為表只需要創(chuàng)建一次,但經(jīng)常被更新。
72、 方法execute: 用于執(zhí)行返回多個結(jié)果集、多個更新計數(shù)或二者組合的語句。
73、因為多數(shù)程序員不會需要該高級功能 execute方法應(yīng)該僅在語句能返回多個ResultSet對象、多個更新計數(shù)或ResultSet對象與更新計數(shù)的組合時使用。
74、當(dāng)執(zhí)行某個已存儲過程 或動態(tài)執(zhí)行未知 SQL 字符串(即應(yīng)用程序程序員在編譯時未知)時,有可能出現(xiàn)多個結(jié)果的情況,盡管這種情況很少見。
75、 因為方法 execute 處理非常規(guī)情況,所以獲取其結(jié)果需要一些特殊處理并不足為怪。
76、例如,假定已知某個過程返回兩個結(jié)果集,則在使用方法 execute 執(zhí)行該過程后,必須調(diào)用方法 getResultSet 獲得第一個結(jié)果集,然后調(diào)用適當(dāng)?shù)?getXXX 方法獲取其中的值。
77、要獲得第二個結(jié)果集,需要先調(diào)用 getMoreResults 方法,然后再調(diào)用 getResultSet 方法。
78、如果已知某個過程返回兩個更新計數(shù),則首先調(diào)用方法 getUpdateCount,然后調(diào)用 getMoreResults,并再次調(diào)用 getUpdateCount。
79、 對于不知道返回內(nèi)容,則情況更為復(fù)雜。
80、如果結(jié)果是 ResultSet 對象,則方法 execute 返回 true;如果結(jié)果是 Java int,則返回 false。
81、如果返回 int,則意味著結(jié)果是更新計數(shù)或執(zhí)行的語句是 DDL 命令。
82、在調(diào)用方法 execute 之后要做的第一件事情是調(diào)用 getResultSet 或 getUpdateCount。
83、調(diào)用方法 getResultSet 可以獲得兩個或多個 ResultSet 對象中第一個對象;或調(diào)用方法 getUpdateCount 可以獲得兩個或多個更新計數(shù)中第一個更新計數(shù)的內(nèi)容。
84、 當(dāng) SQL 語句的結(jié)果不是結(jié)果集時,則方法 getResultSet 將返回 null。
85、這可能意味著結(jié)果是一個更新計數(shù)或沒有其它結(jié)果。
86、在這種情況下,判斷 null 真正含義的唯一方法是調(diào)用方法 getUpdateCount,它將返回一個整數(shù)。
87、這個整數(shù)為調(diào)用語句所影響的行數(shù);如果為 -1 則表示結(jié)果是結(jié)果集或沒有結(jié)果。
88、如果方法 getResultSet 已返回 null(表示結(jié)果不是 ResultSet 對象),則返回值 -1 表示沒有其它結(jié)果。
89、也就是說,當(dāng)下列條件為真時表示沒有結(jié)果(或沒有其它結(jié)果): ((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1)) 如果已經(jīng)調(diào)用方法 getResultSet 并處理了它返回的 ResultSet 對象,則有必要調(diào)用方法 getMoreResults 以確定是否有其它結(jié)果集或更新計數(shù)。
90、如果 getMoreResults 返回 true,則需要再次調(diào)用 getResultSet 來檢索下一個結(jié)果集。
91、如上所述,如果 getResultSet 返回 null,則需要調(diào)用 getUpdateCount 來檢查 null 是表示結(jié)果為更新計數(shù)還是表示沒有其它結(jié)果。
92、 當(dāng) getMoreResults 返回 false 時,它表示該 SQL 語句返回一個更新計數(shù)或沒有其它結(jié)果。
93、因此需要調(diào)用方法 getUpdateCount 來檢查它是哪一種情況。
94、在這種情況下,當(dāng)下列條件為真時表示沒有其它結(jié)果: ((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1)) 下面的代碼演示了一種方法用來確認(rèn)已訪問調(diào)用方法 execute 所產(chǎn)生的全部結(jié)果集和更新計數(shù): stmt.execute(queryStringWithUnknownResults); while (true) { int rowCount = stmt.getUpdateCount(); if (rowCount >0) { // 它是更新計數(shù) System.out.println("Rows changed = " + count); stmt.getMoreResults(); continue; } if (rowCount == 0) { // DDL 命令或 0 個更新 System.out.println(" No rows changed or statement was DDL command"); stmt.getMoreResults(); continue; } // 執(zhí)行到這里,證明有一個結(jié)果集 // 或沒有其它結(jié)果 ResultSet rs = stmt.getResultSet; if (rs != null) { . . . // 使用元數(shù)據(jù)獲得關(guān)于結(jié)果集列的信息 while (rs.next()) { . . . // 處理結(jié)果 stmt.getMoreResults(); continue; } break; // 沒有其它結(jié)果。
本文到此分享完畢,希望對大家有所幫助。