JDBC中的語句型別有哪些?


JDBC中有三種類型的語句:Statement、PreparedStatement和CallableStatement。

Statement

Statement介面表示靜態SQL語句。它幫助你使用Java建立通用的SQL語句。

建立Statement

你可以使用**Connection**介面的**createStatement()**方法建立此介面的物件。

如下所示呼叫**createStatement()**方法建立Statement:

Statement stmt = null;
try {
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

執行Statement物件

建立Statement物件後,可以使用其中一個execute方法執行它,這些方法分別是execute()、executeUpdate()和executeQuery()。

  • **execute():** 此方法用於執行SQL DDL語句,它返回一個布林值,指定是否可以檢索ResultSet物件。

  • **executeUpdate():** 此方法用於執行插入、更新、刪除等語句。它返回一個整數值,表示受影響的行數。

  • **executeQuery():** 此方法用於執行返回表格資料的語句(例如SELECT語句)。它返回ResultSet類的物件。

PreparedStatement

**PreparedStatement**介面擴充套件了Statement介面。它表示一個預編譯的SQL語句,可以多次執行。它接受引數化的SQL查詢,你可以向此查詢傳遞0個或多個引數。

最初,此語句使用佔位符“**?**”代替引數,之後,你可以使用**PreparedStatement**介面的**setXXX()**方法動態地向這些佔位符傳遞引數。

建立PreparedStatement

你可以使用Connection介面的**prepareStatement()**方法建立一個**PreparedStatement**(介面)物件。此方法接受一個查詢(引數化的)並返回一個PreparedStatement物件。

呼叫此方法時,Connection物件會將給定的查詢傳送到資料庫進行編譯和儲存。只有在查詢成功編譯後,它才會返回物件。

為了編譯查詢,資料庫不需要任何值,因此,你可以在查詢中的值位置使用(零個或多個)**佔位符**(問號“?”)。

例如,如果你的資料庫中有一個名為**Employee**的表,使用以下查詢建立:

CREATE TABLE Employee(Name VARCHAR(255), Salary INT NOT NULL, Location
VARCHAR(255));

那麼,你可以使用**PreparedStatement**向其中插入值,如下所示:

//Creating a Prepared Statement
String query="INSERT INTO Employee(Name, Salary, Location)VALUES(?, ?, ?)";
Statement pstmt = con.prepareStatement(query);

為佔位符設定值

**PreparedStatement**介面提供了一些setter方法,例如setInt()、setFloat()、setArray()、setDate()、setDouble()等,用於為PreparedStatement的佔位符設定值。

這些方法接受兩個引數,一個是表示佔位符位置索引的整數值,另一個是int、String、float等表示你需要在該特定位置插入的值。

建立PreparedStatement物件(帶有佔位符)後,你可以使用setter方法為PreparedStatement的佔位符設定值,如下所示:

pstmt.setString(1, "Amit");
pstmt.setInt(2, 3000);
pstmt.setString(3, "Hyderabad");

執行PreparedStatement

建立**PreparedStatement**物件後,可以使用**PreparedStatement**介面的其中一個**execute()**方法執行它,這些方法分別是execute()、executeUpdate()和executeQuery()。

  • **execute():** 此方法執行當前PreparedStatement物件中的普通靜態SQL語句,並返回一個布林值。

  • **executeQuery():** 此方法執行當前PreparedStatement並返回一個**ResultSet**物件。

  • **executeUpdate():** 此方法在當前PreparedStatement中執行SQL DML語句,例如插入、更新或刪除。它返回一個整數值,表示受影響的行數。

CallableStatement

**CallableStatement**介面提供執行儲存過程的方法。由於JDBC API提供了一個儲存過程SQL轉義語法,你可以以單一標準方式呼叫所有RDBMS的儲存過程。

建立CallableStatement

你可以使用**Connection**介面的**prepareCall()**方法建立一個**CallableStatement**(介面)物件。

此方法接受一個字串變數,表示呼叫儲存過程的查詢,並返回一個**CallableStatement**物件。

CallableStatement可以有輸入引數、輸出引數或兩者兼有。要向過程呼叫傳遞輸入引數,可以使用佔位符並使用CallableStatement介面提供的setter方法(setInt()、setString()、setFloat())為這些佔位符設定值。

假設你的資料庫中有一個名為myProcedure的過程,你可以準備一個CallableStatement,如下所示:

//Preparing a CallableStatement
CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");

為輸入引數設定值

你可以使用setter方法為過程呼叫的輸入引數設定值。

這些方法接受兩個引數,一個是表示輸入引數位置索引的整數值,另一個是int、String、float等表示你需要傳遞給過程的輸入引數的值。

**注意:**除了索引之外,你還可以使用字串格式傳遞引數的名稱。

cstmt.setString(1, "Raghav");
cstmt.setInt(2, 3000);
cstmt.setString(3, "Hyderabad");

執行CallableStatement

建立CallableStatement物件後,可以使用其中一個**execute()**方法執行它。

cstmt.execute();

更新於:2019年7月30日

10K+ 瀏覽量

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.