學(xué)習(xí)啦 > 創(chuàng)業(yè)指南 > 職場 > 面試題 >

execute、executequery和executeupdate之間的區(qū)別是什么

時(shí)間: 書榮1192 分享

  單車間調(diào)度問題(Job-shop scheduling problem, JSP)是最基本、最著名的調(diào)度問題,也是NP難問題,無最優(yōu)解精確算法。下面是學(xué)習(xí)啦小編為你整理的JSP面試題,希望對(duì)你有所幫助!


  在用純JSP做一個(gè)頁面報(bào)警功能的時(shí)候習(xí)慣性的用executeQuery來執(zhí)行SQL語句,結(jié)果執(zhí)行update時(shí)就遇到問題,語句能執(zhí)行,但返回結(jié)果出現(xiàn)問題,另外還忽略了executeUpdate的返回值不是結(jié)果集ResultSet,而是數(shù)值!特收藏如下一篇文章(感謝網(wǎng)友們對(duì)各種信息的貢獻(xiàn)): JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之間的區(qū)別 Statement 接口提供了三種執(zhí)行 SQL 語句的方法:executeQuery、executeUpdate 和 execute。使用哪一個(gè)方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。 方法executeQuery 用于產(chǎn)生單個(gè)結(jié)果集的語句,例如 SELECT 語句。 被使用最多的執(zhí)行 SQL 語句的方法是 executeQuery。這個(gè)方法被用來執(zhí)行 SELECT 語句,它幾乎是使用最多的 SQL 語句。 方法executeUpdate 用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個(gè)整數(shù),指示受影響的行數(shù)(即更新計(jì)數(shù))。對(duì)于 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。 使用executeUpdate方法是因?yàn)樵?createTableCoffees 中的 SQL 語句是 DDL (數(shù)據(jù)定義語言)語句。創(chuàng)建表,改變表,刪除表都是 DDL 語句的例子,要用 executeUpdate 方法來執(zhí)行。你也可以從它的名字里看出,方法 executeUpdate 也被用于執(zhí)行更新表 SQL 語句。實(shí)際上,相對(duì)于創(chuàng)建表來說,executeUpdate 用于更新表的時(shí)間更多,因?yàn)楸碇恍枰獎(jiǎng)?chuàng)建一次,但經(jīng)常被更新。 方法execute: 用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的語句。因?yàn)槎鄶?shù)程序員不會(huì)需要該高級(jí)功能 execute方法應(yīng)該僅在語句能返回多個(gè)ResultSet對(duì)象、多個(gè)更新計(jì)數(shù)或ResultSet對(duì)象與更新計(jì)數(shù)的組合時(shí)使用。當(dāng)執(zhí)行某個(gè)已存儲(chǔ)過程 或動(dòng)態(tài)執(zhí)行未知 SQL 字符串(即應(yīng)用程序程序員在編譯時(shí)未知)時(shí),有可能出現(xiàn)多個(gè)結(jié)果的情況,盡管這種情況很少見。 因?yàn)榉椒?execute 處理非常規(guī)情況,所以獲取其結(jié)果需要一些特殊處理并不足為怪。例如,假定已知某個(gè)過程返回兩個(gè)結(jié)果集,則在使用方法 execute 執(zhí)行該過程后,必須調(diào)用方法 getResultSet 獲得第一個(gè)結(jié)果集,然后調(diào)用適當(dāng)?shù)?getXXX 方法獲取其中的值。要獲得第二個(gè)結(jié)果集,需要先調(diào)用 getMoreResults 方法,然后再調(diào)用 getResultSet 方法。如果已知某個(gè)過程返回兩個(gè)更新計(jì)數(shù),則首先調(diào)用方法 getUpdateCount,然后調(diào)用 getMoreResults,并再次調(diào)用 getUpdateCount。 對(duì)于不知道返回內(nèi)容,則情況更為復(fù)雜。如果結(jié)果是 ResultSet 對(duì)象,則方法 execute 返回 true;如果結(jié)果是 Java int,則返回 false。如果返回 int,則意味著結(jié)果是更新計(jì)數(shù)或執(zhí)行的語句是 DDL 命令。在調(diào)用方法 execute 之后要做的第一件事情是調(diào)用 getResultSet 或 getUpdateCount。調(diào)用方法 getResultSet 可以獲得兩個(gè)或多個(gè) ResultSet 對(duì)象中第一個(gè)對(duì)象;或調(diào)用方法 getUpdateCount 可以獲得兩個(gè)或多個(gè)更新計(jì)數(shù)中第一個(gè)更新計(jì)數(shù)的內(nèi)容。 當(dāng) SQL 語句的結(jié)果不是結(jié)果集時(shí),則方法 getResultSet 將返回 null。這可能意味著結(jié)果是一個(gè)更新計(jì)數(shù)或沒有其它結(jié)果。在這種情況下,判斷 null 真正含義的唯一方法是調(diào)用方法 getUpdateCount,它將返回一個(gè)整數(shù)。這個(gè)整數(shù)為調(diào)用語句所影響的行數(shù);如果為 -1 則表示結(jié)果是結(jié)果集或沒有結(jié)果。如果方法 getResultSet 已返回 null(表示結(jié)果不是 ResultSet 對(duì)象),則返回值 -1 表示沒有其它結(jié)果。也就是說,當(dāng)下列條件為真時(shí)表示沒有結(jié)果(或沒有其它結(jié)果): ((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1)) 如果已經(jīng)調(diào)用方法 getResultSet 并處理了它返回的 ResultSet 對(duì)象,則有必要調(diào)用方法 getMoreResults 以確定是否有其它結(jié)果集或更新計(jì)數(shù)。如果 getMoreResults 返回 true,則需要再次調(diào)用 getResultSet 來檢索下一個(gè)結(jié)果集。如上所述,如果 getResultSet 返回 null,則需要調(diào)用 getUpdateCount 來檢查 null 是表示結(jié)果為更新計(jì)數(shù)還是表示沒有其它結(jié)果。 當(dāng) getMoreResults 返回 false 時(shí),它表示該 SQL 語句返回一個(gè)更新計(jì)數(shù)或沒有其它結(jié)果。因此需要調(diào)用方法 getUpdateCount 來檢查它是哪一種情況。在這種情況下,當(dāng)下列條件為真時(shí)表示沒有其它結(jié)果: ((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1)) 下面的代碼演示了一種方法用來確認(rèn)已訪問調(diào)用方法 execute 所產(chǎn)生的全部結(jié)果集和更新計(jì)數(shù): stmt.execute(queryStringWithUnknownResults); while (true) { int rowCount = stmt.getUpdateCount(); if (rowCount > 0) { // 它是更新計(jì)數(shù) System.out.println("Rows changed = " + count);stmt.getMoreResults(); continue; } if (rowCount == 0) { // DDL 命令或 0 個(gè)更新 System.out.println(" No rows changed or statement was DDL command"); stmt.getMoreResults(); continue; } // 執(zhí)行到這里,證明有一個(gè)結(jié)果集 // 或沒有其它結(jié)果 ResultSet rs = stmt.getResultSet; if (rs != null) { . . . // 使用元數(shù)據(jù)獲得關(guān)于結(jié)果集列的信息 while (rs.next()) { . . . // 處理結(jié)果 stmt.getMoreResults(); continue; } break; // 沒有其它結(jié)果


面試題相關(guān)文章:

1.求職面試題目及答案大全

2.經(jīng)典面試題

3.競聘上崗面試題及答案

4.抗壓能力面試題及參考答案

5.經(jīng)典情景面試題及參考答案

4064121