Computer >> Máy Tính >  >> Lập trình >> MySQL

Chúng ta có thể gọi các hàm bằng cách sử dụng Câu lệnh có thể gọi được không? Giải thích bằng một ví dụ trong JDBC?

Giống như các thủ tục, bạn cũng có thể tạo hàm trong cơ sở dữ liệu và lưu trữ chúng.

Cú pháp

Sau đây là cú pháp tạo một hàm trong cơ sở dữ liệu (MySQL):

CREATE FUNCTION Function_Name(input_arguments) RETURNS output_parameter
BEGIN
   declare variables;
   statements . . . . . . . . . .
   return data_type;
   END

Ví dụ

Giả sử chúng ta có một bảng có tên Emp trong cơ sở dữ liệu với nội dung sau:

+--------+------------+----------------+
| Name   | DOB        | Location      |
+--------+------------+----------------+
| Amit   | 1970-01-08 | Hyderabad      |
| Sumith | 1970-01-08 | Vishakhapatnam |
| Sudha  | 1970-01-05 | Vijayawada     |
+--------+------------+----------------+

Dưới đây là ví dụ về cách tạo một hàm. Ở đây, chúng tôi đang tạo một hàm có tên getDob () chấp nhận tên của nhân viên, truy xuất và trả về giá trị của (các) cột DOB.

CREATE FUNCTION getDob(emp_name VARCHAR(50)) RETURNS DATE
BEGIN
declare dateOfBirth DATE;
select DOB into dateOfBirth from EMP where Name = emp_name;
return dateOfBirth;
END

Gọi một hàm bằng JDBC

Bạn có thể gọi một hàm bằng CallableStatement giống như các thủ tục được lưu trữ, để gọi một hàm bằng chương trình JDBC, bạn cần phải làm như vậy.

  • Kết nối với cơ sở dữ liệu.

  • Tạo Câu lệnh chuẩn bị đối tượng và phương thức khởi tạo của nó chuyển lệnh gọi hàm ở định dạng Chuỗi.

  • Đặt giá trị cho các giá trị giữ chỗ.

  • Thực thi câu lệnh Callable.

Sau đây là truy vấn để gọi một hàm từ JDBC:

{? = call getDob(?)}

Khi bạn quan sát, truy vấn chứa các trình giữ chỗ (?) Giống như các câu lệnh đã chuẩn bị và có thể gọi.

Trong truy vấn trên, trình giữ chỗ đầu tiên đại diện cho giá trị trả về của hàm và trình giữ chỗ thứ hai đại diện cho tham số đầu vào.

Bạn cần đăng ký trình giữ chỗ đại diện cho giá trị trả về, làm tham số đầu ra bằng cách sử dụng registerOutParameter () (của giao diện CallableStatement). Đối với phương thức này, bạn cần chuyển một giá trị số nguyên đại diện cho vị trí của trình giữ chỗ và, một biến số nguyên đại diện cho kiểu sql (của tham số)

cstmt.registerOutParameter(1, Types.DATE);

Đặt giá trị cho tham số đầu vào bằng phương thức setString (). (vì hàm getDoc () chấp nhận giá trị kiểu VARCHAR).

Ví dụ

Chương trình JDBC sau thực thi hàm getDob và lấy kết quả:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
public class CallingFunctionsUsingCallable2 {
   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 CallableStatement
      CallableStatement cstmt = con.prepareCall("{? = call getDob(?)}");

      cstmt.registerOutParameter(1, Types.DATE);
      cstmt.setString(2, "Amit");
      cstmt.execute();

      System.out.print("Date of birth: "+cstmt.getDate(1));
   }
}

Đầu ra

Connection established......
Date of birth: 1970-01-08