CallableStatement อินเทอร์เฟซให้วิธีการดำเนินการขั้นตอนการจัดเก็บ เนื่องจาก JDBC API จัดเตรียมไวยากรณ์ Escape ของโพรซีเดอร์ที่เก็บไว้ คุณจึงสามารถเรียกโพรซีเดอร์ที่เก็บไว้ของ RDBMS ทั้งหมดด้วยวิธีมาตรฐานเดียวได้
การสร้าง CallableStatement
คุณสามารถสร้างออบเจ็กต์ของ CallableStatement (อินเทอร์เฟซ) โดยใช้ prepareCall() วิธีการของการเชื่อมต่อ อินเตอร์เฟซ. เมธอดนี้ยอมรับตัวแปรสตริงที่เป็นตัวแทนของคิวรีเพื่อเรียกกระบวนงานที่เก็บไว้และส่งคืน CallableStatement วัตถุ
คำสั่ง Callable สามารถมีพารามิเตอร์อินพุต พารามิเตอร์เอาต์พุต หรือทั้งสองอย่าง ในการส่งพารามิเตอร์อินพุตไปยังการเรียกโพรซีเดอร์ คุณสามารถใช้ตัวยึดตำแหน่งและตั้งค่าเหล่านี้โดยใช้เมธอด setter (setInt(), setString(), setFloat()) ที่มีให้โดยอินเทอร์เฟซ CallableStatement
สมมติว่าคุณมีชื่อโพรซีเดอร์ myProcedure ในฐานข้อมูล คุณสามารถเตรียมคำสั่งที่เรียกได้เป็น:
//การเตรียม CallableStatementCallableStatement cstmt =con.prepareCall("{call myProcedure(?, ?, ?)}");
การตั้งค่าพารามิเตอร์อินพุต
คุณสามารถตั้งค่าพารามิเตอร์อินพุตของการเรียกโพรซีเดอร์ได้โดยใช้เมธอด setter
สิ่งเหล่านี้ยอมรับสองอาร์กิวเมนต์ อันแรกคือค่าจำนวนเต็มที่แทนดัชนีตำแหน่งของพารามิเตอร์อินพุต และอีกอันคือ int หรือ String หรือ float ฯลฯ... แทนค่าที่คุณต้องส่งพารามิเตอร์ asinput ไปยังโพรซีเดอร์
หมายเหตุ: คุณยังสามารถส่งชื่อของพารามิเตอร์ในรูปแบบสตริงแทนดัชนีได้
cstmt.setString(1, "Raghav");cstmt.setInt(2, 3000);cstmt.setString(3, "ไฮเดอราบาด");
การดำเนินการคำสั่ง Callable
เมื่อคุณสร้างวัตถุ CallableStatement แล้ว คุณสามารถดำเนินการได้โดยใช้หนึ่งใน execute() วิธีการ
cstmt.execute();
ตัวอย่าง
สมมติว่าเรามีโต๊ะชื่อ พนักงาน ในฐานข้อมูล MySQL ด้วยข้อมูลต่อไปนี้:
<ก่อนหน้า>+---------+---------+----------------+| ชื่อ | เงินเดือน | ที่ตั้ง |+---------+---------+----------------+| อามิต | 30000 | ไฮเดอราบัด || กัลยัน | 40000 | วิศาขาปัตตนัม || เรนูกะ | 50000 | เดลี || อาชาน่า | 15000 | มุมไบ |+---------+---------+----------------+และเราได้สร้างขั้นตอนชื่อ myProcedure เพื่อแทรกค่าลงในตารางนี้ดังที่แสดงด้านล่าง:
สร้างโพรซีเดอร์ myProcedure (ในชื่อ VARCHAR(30), IN sal INT, IN loc VARCHAR(45)) -> BEGIN -> INSERT INTO Employee(Name, Salary, Location) VALUES (name, sal, loc); -> END //
ต่อไปนี้เป็นตัวอย่าง JDBC ที่แทรกระเบียนใหม่ลงในตารางพนักงานโดยเรียกใช้ขั้นตอนที่สร้างขึ้นด้านบนโดยใช้คำสั่งที่เรียกได้
นำเข้า java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager นำเข้า java.sql.SQLException คลาสสาธารณะ CallableStatementExample { โมฆะคงสาธารณะหลัก (สตริง args []) พ่น SQLException { // การลงทะเบียนไดร์เวอร์ DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //รับการเชื่อมต่อสตริง mysqlUrl ="jdbc:mysql://localhost/testdb"; การเชื่อมต่อ con =DriverManager.getConnection (mysqlUrl, "root", "password"); System.out.println("การเชื่อมต่อสำเร็จ......"); //การเตรียม CallableStateement CallableStatement cstmt =con.prepareCall("{call myProcedure(?, ?, ?)}"); cstmt.setString(1, "ราฮาฟ"); cstmt.setInt (2, 3000); cstmt.setString(3, "ไฮเดอราบาด"); cstmt.setString(1, "กลยาน"); cstmt.setInt(2, 4000); cstmt.setString(3, "วิศาขาปัตตนัม"); cstmt.setString(1, "รักมินิ"); cstmt.setInt(2, 5000); cstmt.setString(3, "เดลี"); cstmt.setString(1, "อาชา"); cstmt.setInt(2, 15000); cstmt.setString(3, "มุมไบ"); cstmt.execute(); System.out.println("แถวที่แทรก ...."); }}
ผลลัพธ์
เชื่อมต่อแล้ว......แทรกแถวแล้ว ....
หากคุณดึงเนื้อหาของตารางพนักงานโดยใช้แบบสอบถามแบบใช้เลือกข้อมูล คุณสามารถสังเกตระเบียนที่เพิ่มใหม่ดังที่แสดงด้านล่าง:
mysql> เลือก * จากพนักงาน;+---------+----------------------+----------------+| ชื่อ | เงินเดือน | ที่ตั้ง |+---------+---------+----------------+| อามิต | 30000 | ไฮเดอราบัด || กัลยัน | 40000 | วิศาขาปัตตนัม || เรนูกะ | 50000 | เดลี || อาชาน่า | 15000 | มุมไบ || Raghav | 3000 | ไฮเดอราบัด || Raghav | 3000 | ไฮเดอราบัด || กัลยัน | 4000 | วิศาขาปัตตนัม || รักมินิ | 5000 | เดลี || อาชาน่า | 15000 | มุมไบ |+---------+-------+----------------+9 แถวในชุด (0.00 วินาที)