一、建立 Statement 對象
創建了到特定數據庫的鏈接以後,就可用該鏈接發送 SQL 語句。Statement 對象用 Connection 的方法 createStatement 建立,以下列代碼段中所示:
Connection con = DriverManager.getConnection(url, "sunny", "");
Statement stmt = con.createStatement();
爲了執行 Statement 對象,被髮送到數據庫的 SQL 語句將被做爲參數提供給 Statement 的方法:
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2");
二、使用 Statement 對象執行語句
Statement 接口提供了三種執行 SQL 語句的方法:executeQuery、executeUpdate 和 execute。使用哪個方法由 SQL 語句所產生的內容決定。
方法 executeQuery 用於產生單個結果集的語句,例如 SELECT 語句。
方法 executeUpdate 用於執行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數據定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個整數,指示受影響的行數(即更新計數)。對於 CREATE TABLE 或 DROP TABLE 等不操做行的語句,executeUpdate 的返回值總爲零。
方法 execute 用於執行返回多個結果集、多個更新計數或兩者組合的語句。由於多數程序員不會須要該高級功能,因此本概述後面將在單獨一節中對其進行介紹。
執行語句的全部方法都將關閉所調用的 Statement 對象的當前打開結果集(若是存在)。這意味着在從新執行 Statement 對象以前,須要完成對當前 ResultSet 對象的處理。
應注意,繼承了 Statement 接口中全部方法的 PreparedStatement 接口都有本身的 executeQuery、executeUpdate 和 execute 方法。Statement 對象自己不包含 SQL 語句,於是必須給 Statement.execute 方法提供 SQL 語句做爲參數。PreparedStatement 對象並 不將 SQL 語句做爲參數提供給這些方法,由於它們已經包含預編譯 SQL 語句。CallableStatement 對象繼承這些方法的 PreparedStatement 形式。對於這些方法的 PreparedStatement 或 CallableStatement 版本,使用查詢參數將拋出 SQLException。
三、語句完成
當鏈接處於自動提交模式時,其中所執 行的語句在完成時將自動提交或還原。語句在已執行且全部結果返回時,即認爲已完成。對於返回一個結果集的 executeQuery 方法,在檢索完 ResultSet 對象的全部行時該語句完成。對於方法 executeUpdate,當它執行時語句即完成。但在少數調用方法 execute 的狀況中,在檢索全部結果集或它生成的更新計數以後語句才完成。程序員
Statement 接口提供了執行語句和獲取結果的基本方法。PreparedStatement 接口添加了處理 IN 參數的方法;而 CallableStatement 添加了處理 OUT 參數的方法。
有些 DBMS 將已存儲過程當中的每條語句視爲獨立的語句;而另一些則將整個過程視爲一個複合語句。在啓用自動提交時,這種差異就變得很是重要,由於它影響何時調用 commit 方法。在前一種狀況中,每條語句單獨提交;在後一種狀況中,全部語句同時提交。
四、關閉 Statement 對象
Statement 對象將由 Java 垃圾收集程序自動關閉。而做爲一種好的編程風格,應在不須要 Statement 對象時顯式地關閉它們。這將當即釋放 DBMS 資源,有助於避免潛在的內存問題。數據庫