Rumah >pangkalan data >tutorial mysql >Bolehkah kita memanggil fungsi menggunakan pernyataan Boleh Dipanggil? Bolehkah anda menerangkannya menggunakan contoh JDBC?

Bolehkah kita memanggil fungsi menggunakan pernyataan Boleh Dipanggil? Bolehkah anda menerangkannya menggunakan contoh JDBC?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBke hadapan
2023-08-27 18:37:09570semak imbas

我们可以使用 Callable 语句调用函数吗?能用 JDBC 的例子解释一下吗?

Seperti prosedur, anda juga boleh mencipta fungsi dan menyimpannya dalam pangkalan data.

Syntax

Berikut ialah sintaks untuk mencipta fungsi dalam pangkalan data (MySQL):

Syntax

Berikut ialah sintaks untuk mencipta fungsi dalam pangkalan data (MySQL): p>

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

Expose there ialah pangkalan data bernama jadual

Emp

, yang kandungannya adalah seperti berikut:

+--------+------------+----------------+
| Name   | DOB        | Location      |
+--------+------------+----------------+
| Amit   | 1970-01-08 | Hyderabad      |
| Sumith | 1970-01-08 | Vishakhapatnam |
| Sudha  | 1970-01-05 | Vijayawada     |
+--------+------------+----------------+
Contoh mencipta fungsi diberikan di bawah. Di sini, kami mencipta fungsi yang dipanggil

getDob()

yang menerima nama pekerja, mendapatkan semula dan mengembalikan nilai lajur 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
Panggil fungsi menggunakan JDBC

Anda boleh memanggil fungsi menggunakan objek

CallableStatement

sama seperti prosedur tersimpan untuk memanggil fungsi menggunakan program JDBC yang anda perlukan.

    Sambung ke pangkalan data.
  • Buat objek
  • PreparedStatement

    dan hantar pembinanya untuk memanggil fungsi dalam format rentetan.

  • Tetapkan nilai sebagai pemegang tempat.
  • Laksanakan pernyataan Boleh Panggil.
  • Berikut ialah pertanyaan yang memanggil fungsi daripada JDBC:
{? = call getDob(?)}

Seperti yang anda boleh perhatikan, pertanyaan itu mengandungi ruang letak (?), sama seperti pernyataan yang disediakan dan pernyataan boleh dipanggil.

Dalam pertanyaan di atas, pemegang tempat pertama mewakili nilai pulangan fungsi, dan pemegang tempat kedua mewakili input

Anda perlu menggunakan kaedah

registerOutParameter()

antara muka CallableStatement untuk meletakkan pemegang tempat mewakili nilai pulangan Didaftarkan sebagai parameter output. Untuk kaedah ini, anda perlu menghantar nilai integer yang mewakili kedudukan pemegang tempat dan pembolehubah integer yang mewakili jenis sql (parameter)

cstmt.registerOutParameter(1, Types.DATE);
Gunakan kaedah setString() untuk menetapkan nilai kepada parameter input. (Oleh kerana fungsi getDoc() menerima nilai jenis VARCHAR).

Contoh

Program JDBC berikut melaksanakan fungsi

getDob

dan mendapatkan semula hasilnya:

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));
   }
}
output p>
Connection established......
Date of birth: 1970-01-08

Atas ialah kandungan terperinci Bolehkah kita memanggil fungsi menggunakan pernyataan Boleh Dipanggil? Bolehkah anda menerangkannya menggunakan contoh JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam