如何使用JDBC API在資料庫中建立儲存過程?


A. 儲存過程是子程式,是儲存在SQL目錄中的SQL語句段。所有能夠訪問關係資料庫的應用程式(Java、Python、PHP等)都可以訪問儲存過程。

儲存過程包含輸入和輸出引數,或兩者兼有。如果使用SELECT語句,它們可能會返回結果集。儲存過程可以返回多個結果集。

要在(MySQL)資料庫中使用JDBC API建立儲存過程,您需要:

  • 註冊驅動程式:使用 **DriverManager** 類的 **registerDriver()** 方法註冊驅動程式類。將驅動程式類名作為引數傳遞給它。

  • 建立連線:使用 **DriverManager** 類的 **getConnection()** 方法連線到資料庫。將URL(字串)、使用者名稱(字串)、密碼(字串)作為引數傳遞給它。

  • 建立Statement:使用 **Connection** 介面的 **createStatement()** 方法建立一個 Statement 物件。

  • 執行查詢:使用 Statement 介面的 execute() 方法執行建立儲存過程的查詢。

示例

假設資料庫中有一個名為Customers的表,其描述如下:

+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI | NULL    |       |
| NAME    | varchar(20)   | NO   |     | NULL    |       |
| AGE     | int(11)       | NO   |     | NULL    |       |
| SALARY  | decimal(18,2) | YES  |     | NULL    |       |
| ADDRESS | char(25)      | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+

以下JDBC程式建立與MySQL的連線,並在名為mydatabase的資料庫中建立一個名為retrieveData的過程。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateStoredProcedureExample {
   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......");
      //Creating the Statement
      Statement stmt = con.createStatement();
      //Query to create stored procedures
      String query = "CREATE PROCEDURE `retrieveData`() " +
         "BEGIN "+
         " SELECT * FROM Customers; "+
         "END";
      //Executing the query
      stmt.execute(query);
      System.out.println("Procedure Created......");
   }
}

輸出

Connection established......
Procedure Created......

SHOW CREATE PROCEDURE **procedure_name** 命令顯示指定過程的原始碼;如果過程不存在,則會報錯。

使用此命令驗證是否在MySQL資料庫中建立了名為retrieveData的過程:

mysql> SHOW CREATE PROCEDURE retrieveData;
+--------------+----------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Procedure | sql_mode | Create Procedure | character_set_client | collation_connection | Database Collation |
+--------------+----------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| retrieveData | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` PROCEDURE `retrieveData`()
BEGIN SELECT * FROM Customers; END | utf8 | utf8_general_ci | utf8_general_ci |
+--------------+----------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

更新於:2019年7月30日

3000+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告