一旦我們獲得了數(shù)據(jù)庫的連接,我們就可以和數(shù)據(jù)庫進行交互娄蔼。JDBC 的? Statement,CallableStatement 和
PreparedStatement 接口定義的方法和屬性,可以讓你發(fā)送 SQL 命令或 PL/SQL 命令到數(shù)據(jù)庫,并從你的數(shù)據(jù)庫接收數(shù)據(jù)砾赔。
在數(shù)據(jù)庫中,它們還定義了幫助 Java 和 SQL 數(shù)據(jù)類型之間轉(zhuǎn)換數(shù)據(jù)差異的方法青灼。
下面提供了每個接口的用途概要过蹂,根據(jù)實際目的決定使用哪個接口。
Statement可以正常訪問數(shù)據(jù)庫聚至,適用于運行靜態(tài) SQL 語句。 Statement 接口不接受參數(shù)本橙。
PreparedStatement計劃多次使用 SQL 語句扳躬, PreparedStatement 接口運行時接受輸入的參數(shù)。
CallableStatement適用于當你要訪問數(shù)據(jù)庫存儲過程的時候甚亭, CallableStatement 接口運行時也接受輸入的參數(shù)贷币。
Statement 對象
創(chuàng)建 Statement 對象
在你準備使用 Statement 對象執(zhí)行 SQL 語句之前,你需要使用? Connection 對象的 createStatement() 方法創(chuàng)建一個亏狰,如下面的示例所示-
Statement stmt = null;
try {
stmt = conn.createStatement( );
. . .
}
catch (SQLException e) {
. . .
}
finally {
. . .
}
當你創(chuàng)建了一個 Statement 對象之后役纹,你可以用它的三個執(zhí)行方法的任一方法來執(zhí)行 SQL 語句。
boolean execute(String SQL) :如果 ResultSet 對象可以被檢索暇唾,則返回的布爾值為 true 促脉,否則返回 false 。當你需要使用真正的動態(tài) SQL 時策州,可以使用這個方法來執(zhí)行 SQL DDL 語句瘸味。
int executeUpdate(String SQL) :返回執(zhí)行 SQL 語句影響的行的數(shù)目。使用該方法來執(zhí)行 SQL 語句够挂,是希望得到一些受影響的行的數(shù)目旁仿,例如,INSERT孽糖,UPDATE 或 DELETE 語句枯冈。
ResultSet executeQuery(String SQL) :返回一個? ResultSet 對象毅贮。當你希望得到一個結(jié)果集時使用該方法,就像你使用一個 SELECT 語句尘奏。
關閉 Statement 對象
正如你關閉一個 Connection 對象來節(jié)約數(shù)據(jù)庫資源滩褥,出于同樣的原因你也應該關閉 Statement 對象。
簡單的調(diào)用 close() 方法就可以完成這項工作罪既。如果你關閉了? Connection 對象铸题,那么它也會關閉 Statement 對象。然而琢感,你應該始終明確關閉 Statement 對象丢间,以確保真正的清除。
Statement stmt = null;
try {
stmt = conn.createStatement( );
. . .
}
catch (SQLException e) {
. . .
}
finally {
stmt.close();
}
PreparedStatement 對象
PreparedStatement接口擴展了 Statement 接口驹针,它讓你用一個常用的 Statement 對象增加幾個高級功能烘挫。
這個 statement 對象可以提供靈活多變的動態(tài)參數(shù)。
創(chuàng)建 PreparedStatement 對象
PreparedStatement pstmt = null;
try {
String SQL = "Update Employees SET age = ? WHERE id = ?";
pstmt = conn.prepareStatement(SQL);
. . .
}
catch (SQLException e) {
. . .
}
finally {
. . .
}
JDBC 中所有的參數(shù)都被用?符號表示柬甥,這是已知的參數(shù)標記饮六。在執(zhí)行 SQL 語句之前,你必須賦予每一個參數(shù)確切的數(shù)值苛蒲。
setXXX()方法將值綁定到參數(shù)卤橄,其中XXX表示你希望綁定到輸入?yún)?shù)的 Java 數(shù)據(jù)類型。如果你忘了賦予值臂外,你將收到一個 SQLException窟扑。
每個參數(shù)標記映射它的序號位置。第一標記表示位置 1 漏健,下一個位置為 2? 等等嚎货。這種方法不同于 Java 數(shù)組索引,它是從 0 開始的蔫浆。
所有的Statement對象的方法都與數(shù)據(jù)庫交互殖属,(a) execute(),(b) executeQuery()瓦盛,及 (c) executeUpdate() 也能被 PreparedStatement 對象引用洗显。然而,這些方法被 SQL 語句修改后是可以輸入?yún)?shù)的原环。
關閉 PreparedStatement 對象
正如你關閉一個 Statement 對象墙懂,出于同樣的原因,你也應該關閉? PreparedStatement 對象扮念。
簡單的調(diào)用 close() 方法可以完成這項工作损搬。如果你關閉了 Connection? 對象,那么它也會關閉 PreparedStatement 對象。然而巧勤,你應該始終明確關閉 PreparedStatement 對象嵌灰,以確保真正的清除。
PreparedStatement pstmt = null;
try {
String SQL = "Update Employees SET age = ? WHERE id = ?";
pstmt = conn.prepareStatement(SQL);
. . .
}
catch (SQLException e) {
. . .
}
finally {
pstmt.close();
}
CallableStatement 對象
正如一個 Connection 對象可以創(chuàng)建 Statement 對象和? PreparedStatement 對象颅悉,它也可以創(chuàng)建被用來執(zhí)行調(diào)用數(shù)據(jù)庫存儲過程的 CallableStatement 對象沽瞭。不過我們在此暫時不做過多描述!