如何使用 JDBC API 呼叫資料庫中已存在的儲存過程?
A. 儲存過程是子程式,儲存在 SQL 目錄中的 SQL 語句片段。所有可以訪問關係資料庫(Java、Python、PHP 等)的應用程式都可以訪問儲存過程。
儲存過程包含輸入和輸出引數或兩者兼而有之。如果使用 SELECT 語句,它們可能會返回結果集。儲存過程可以返回多個結果集。
您可以使用以下語法呼叫儲存過程
CALL procedure_name ()
JDBC 提供了一種標準的儲存過程 SQL 轉義語法,您可以使用它在所有 RDBMS 中使用過程
要使用 JDBC 程式呼叫儲存過程,您需要
**註冊驅動程式**:使用 **DriverManager** 類的 **registerDriver()** 方法註冊驅動程式類。將驅動程式類名作為引數傳遞給它。
**建立連線**:使用 **DriverManager** 類的 **getConnection()** 方法連線到資料庫。將 URL(字串)、使用者名稱(字串)、密碼(字串)作為引數傳遞給它。
**建立語句**:使用 **Connection** 介面的 **prepareCall()** 方法建立一個 CallableStatement 物件。
**執行查詢**:使用 Statement 介面的 executeQuery() 方法執行查詢。
示例
假設我們有一個名為 customers 的表在資料庫中,其內容如下所示
+----+-----------+-----+---------+----------------+ | ID | NAME | AGE | SALARY | ADDRESS | +----+-----------+-----+---------+----------------+ | 1 | Amit | 25 | 3000.00 | Hyderabad | | 2 | Kalyan | 27 | 4000.00 | Vishakhapatnam | | 3 | Renuka | 30 | 5000.00 | Delhi | | 4 | Archana | 24 | 1500.00 | Delhi | | 5 | Koushik | 30 | 9000.00 | Delhi | | 6 | Hardik | 45 | 6400.00 | Delhi | | 7 | Trupthi | 33 | 4360.00 | Delhi | | 8 | Mithili | 26 | 4100.00 | Vijayawada | | 9 | Maneesh | 39 | 4000.00 | Hyderabad | | 10 | Rajaneesh | 30 | 6400.00 | Delhi | | 11 | Komal | 29 | 8000.00 | Ahmedabad | | 12 | Manyata | 25 | 5000.00 | Vijayawada | +----+-----------+-----+---------+----------------+
我們在 MySQL 中建立了一個名為 retrieveData 的儲存過程,它檢索此表的內容,如下所示
mysql> DELIMITER // ; mysql> Create procedure retrieveData() BEGIN Select * from customers; END// Query OK, 0 rows affected (0.00 sec) mysql> DELIMITER ;
以下 JDBC 程式建立與 MySQL 資料庫的連線,呼叫名為 retrieveData 的過程,檢索過程返回的 ResultSet 物件,並顯示其內容。
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CallngStoredProcedureExample {
public static void main(String args[]) throws SQLException {
//Registering the Driver
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//Getting the connection
String mysqlUrl = "jdbc:mysql:///mydatabase";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
//Preparing a CallableStatement to call the retrieveData procedure
CallableStatement cstmt = con.prepareCall("{call retrieveData()}");
//Executing the CallableStatement
ResultSet rs = cstmt.executeQuery();
//Displaying the result
while(rs.next()) {
System.out.print("ID: "+rs.getInt("ID")+", ");
System.out.print("Name: "+rs.getString("Name")+", ");
System.out.print("Age: "+rs.getInt("Age")+", ");
System.out.print("Salary: "+rs.getInt("Salary")+", ");
System.out.print("Address: "+rs.getString("Address"));
System.out.println();
}
}
}輸出
Connection established...... ID: 1, Name: Amit, Age: 25, Salary: 3000, Address: Hyderabad ID: 2, Name: Kalyan, Age: 27, Salary: 4000, Address: Vishakhapatnam ID: 3, Name: Renuka, Age: 30, Salary: 5000, Address: Delhi ID: 4, Name: Archana, Age: 24, Salary: 1500, Address: Delhi ID: 5, Name: Koushik, Age: 30, Salary: 9000, Address: Delhi ID: 6, Name: Hardik, Age: 45, Salary: 6400, Address: Delhi ID: 7, Name: Trupthi, Age: 33, Salary: 4360, Address: Delhi ID: 8, Name: Mithili, Age: 26, Salary: 4100, Address: Vijayawada ID: 9, Name: Maneesh, Age: 39, Salary: 4000, Address: Hyderabad ID: 10, Name: Rajaneesh, Age: 30, Salary: 6400, Address: Delhi ID: 11, Name: Komal, Age: 29, Salary: 8000, Address: Ahmedabad ID: 12, Name: Manyata, Age: 25, Salary: 5000, Address: Vijayawada
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP