Bạn có thể gọi các thủ tục được lưu trữ trong SQL bằng giao diện CallableStatement. Một câu lệnh có thể gọi có thể có tham số đầu vào, tham số đầu ra hoặc cả hai.
Bạn có thể tạo một đối tượng của CallableStatement (giao diện) bằng cách sử dụng Chuẩn bị gọi () phương pháp của Kết nối giao diện. Phương thức này chấp nhận một biến chuỗi đại diện cho một truy vấn để gọi các thủ tục được lưu trữ và trả về Câu lệnh có thể gọi đối tượng.
Giả sử bạn có tên thủ tục myProcedure trong cơ sở dữ liệu, bạn có thể chuẩn bị một câu lệnh có thể gọi là:
//Preparing a CallableStatement CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
Sau đó, bạn có thể đặt giá trị cho các trình giữ chỗ bằng cách sử dụng các phương thức setter của giao diện CallableStatement và thực thi câu lệnh có thể gọi bằng phương thức execute () như được hiển thị bên dưới.
cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad"); cstmt.execute();
Nếu không có giá trị đầu vào nào cho quy trình, bạn có thể chỉ cần Chuẩn bị câu lệnh có thể gọi và thực thi nó như hình dưới đây:
CallableStatement cstmt = con.prepareCall("{call myProcedure()}"); cstmt.execute();
Ví dụ
Giả sử chúng ta có một bảng có tên Công văn trong cơ sở dữ liệu MySQL với dữ liệu sau:
+--------------+------------------+------------------+----------------+ | Product_Name | Date_Of_Dispatch | Time_Of_Dispatch | Location | +--------------+------------------+------------------+----------------+ | KeyBoard | 1970-01-19 | 08:51:36 | Hyderabad | | Earphones | 1970-01-19 | 05:54:28 | Vishakhapatnam | | Mouse | 1970-01-19 | 04:26:38 | Vijayawada | +--------------+------------------+------------------+----------------+
Và nếu chúng ta đã tạo một thủ tục có tên là myProcedure để lấy các giá trị từ bảng này như hình dưới đây:
Create procedure myProcedure () -> BEGIN -> SELECT * FROM Dispatches; -> END //
Ví dụ
Sau đây là một ví dụ JDBC gọi thủ tục được lưu trữ được đề cập ở trên bằng cách sử dụng chương trình JDBC.
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class CallingProcedure { 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://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Preparing a CallableStateement CallableStatement cstmt = con.prepareCall("{call myProcedure()}"); //Retrieving the result ResultSet rs = cstmt.executeQuery(); while(rs.next()) { System.out.println("Product Name: "+rs.getString("Product_Name")); System.out.println("Date of Dispatch: "+rs.getDate("Date_Of_Dispatch")); System.out.println("Time of Dispatch: "+rs.getTime("Time_Of_Dispatch")); System.out.println("Location: "+rs.getString("Location")); System.out.println(); } } }
Đầu ra
Connection established...... Product Name: KeyBoard Date of Dispatch: 1970-01-19 Time of Dispatch: 08:51:36 Location: Hyderabad Product Name: Earphones Date of Dispatch: 1970-01-19 Time of Dispatch: 05:54:28 Location: Vishakhapatnam Product Name: Mouse Date of Dispatch: 1970-01-19 Time of Dispatch: 04:26:38 Location: Vijayawada