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

WBOY
Lepaskan: 2023-08-27 18:37:09
ke hadapan
478 orang telah melayarinya

我们可以使用 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
Salin selepas log masuk

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     |
+--------+------------+----------------+
Salin selepas log masuk
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
Salin selepas log masuk
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(?)}
Salin selepas log masuk

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

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan