Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เราสามารถเรียกใช้ฟังก์ชันโดยใช้ Callable Statements ได้หรือไม่? อธิบายด้วยตัวอย่างใน JDBC?


เช่นเดียวกับขั้นตอน คุณสามารถสร้างฟังก์ชันในฐานข้อมูลและจัดเก็บได้

ไวยากรณ์

ต่อไปนี้เป็นรูปแบบการสร้างฟังก์ชันในฐานข้อมูล a (MySQL):

สร้างฟังก์ชัน Function_Name(input_arguments) RETURNS output_parameterBEGIN ประกาศตัวแปร งบ. . . . . . . . . . ส่งคืน data_type; สิ้นสุด

ตัวอย่าง

สมมติว่าเรามีตารางชื่อ Emp ในฐานข้อมูลที่มีเนื้อหาดังต่อไปนี้:

<ก่อนหน้า>+---------+-----------+----------------+| ชื่อ | วันเกิด | ที่ตั้ง |+---------+-----------+----------------+| อามิต | 1970-01-08 | ไฮเดอราบัด || สุมิธ | 1970-01-08 | วิศาขาปัตตนัม || สุดา | 1970-01-05 | วิชัยวาทะ |+---------+-----------+----------------+

ด้านล่างนี้เป็นตัวอย่างของการสร้างฟังก์ชัน ที่นี่ เรากำลังสร้างฟังก์ชันชื่อ getDob() ซึ่งรับชื่อพนักงาน ดึงและคืนค่าของคอลัมน์ DOB

CREATE FUNCTION getDob(emp_name VARCHAR(50)) RETURNS DATEBEGINประกาศ dateOfBirth DATE เลือก DOB เป็น dateOfBirth จาก EMP โดยที่ Name =emp_name;return dateOfBirth;END

การเรียกใช้ฟังก์ชันโดยใช้ JDBC

คุณสามารถเรียกใช้ฟังก์ชันโดยใช้ CallableStatement วัตถุเช่นเดียวกับกระบวนงานที่เก็บไว้ ในการเรียกใช้ฟังก์ชันโดยใช้โปรแกรม JDBC ที่คุณต้องทำ

  • เชื่อมต่อกับฐานข้อมูล

  • สร้าง PreparedStatement วัตถุและคอนสตรัคเตอร์ผ่านการเรียกใช้ฟังก์ชันในรูปแบบสตริง

  • ตั้งค่าเป็นตัวยึดตำแหน่ง

  • ดำเนินการคำสั่ง Callable

ต่อไปนี้เป็นแบบสอบถามเพื่อเรียกใช้ฟังก์ชันจาก JDBC:

<ก่อน>{? =โทร getDob(?)}

ในขณะที่คุณสังเกตข้อความค้นหามีตัวยึดตำแหน่ง (?) เช่นเดียวกับคำสั่งที่เตรียมไว้และเรียกได้

ในแบบสอบถามข้างต้น ตัวยึดตำแหน่งแรกแสดงถึงค่าที่ส่งคืนของฟังก์ชัน และตัวยึดตำแหน่งที่สองแสดงถึงพารามิเตอร์อินพุต

คุณต้องลงทะเบียนตัวยึดตำแหน่งซึ่งแทนค่าที่ส่งคืน เป็นพารามิเตอร์เอาต์พุตโดยใช้ registerOutParameter() เมธอด (ของอินเทอร์เฟซ CallableStatement) ในวิธีนี้ คุณต้องส่งค่าจำนวนเต็มที่แทนตำแหน่งของตัวยึดตำแหน่งและตัวแปรจำนวนเต็มแทนประเภท sql (ของพารามิเตอร์)

cstmt.registerOutParameter(1, Types.DATE);

ตั้งค่าเป็นพารามิเตอร์อินพุตโดยใช้เมธอด setString() (เนื่องจากฟังก์ชัน getDoc() ยอมรับค่าประเภท VARCHAR)

ตัวอย่าง

การติดตามโปรแกรม JDBC จะเรียกใช้ฟังก์ชัน getDob และดึงผลลัพธ์:

<ก่อนหน้า> นำเข้า java.sql.CallableStatement นำเข้า java.sql.Connection นำเข้า java.sql.DriverManager นำเข้า java.sql.SQLException นำเข้า java.sql.Types คลาสสาธารณะ CallingFunctionsUsingCallable2 { St โมฆะ args สาธารณะหลัก ( ]) พ่น SQLException { //การลงทะเบียนไดรเวอร์ DriverManager.registerDriver (ใหม่ com.mysql.jdbc.Driver ()); //รับการเชื่อมต่อสตริง mysqlUrl ="jdbc:mysql://localhost/sampleDB"; การเชื่อมต่อ con =DriverManager.getConnection (mysqlUrl, "root", "password"); System.out.println("การเชื่อมต่อสำเร็จ......"); //เตรียม CallableStatement CallableStatement cstmt =con.prepareCall("{? =โทร getDob(?)}"); cstmt.registerOutParameter (1, Types.DATE); cstmt.setString(2, "อามิต"); cstmt.execute(); System.out.print("วันเกิด:"+cstmt.getDate(1)); }}

ผลลัพธ์

เชื่อมต่อแล้ว......วันเกิด:1970-01-08