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

จะเรียกโพรซีเดอร์ที่เก็บไว้โดยใช้คำสั่ง callable ใน JDBC ได้อย่างไร?


คุณสามารถเรียกโพรซีเดอร์ที่เก็บไว้ SQL โดยใช้อินเทอร์เฟซ CallableStatement คำสั่ง Callable สามารถมีพารามิเตอร์อินพุต พารามิเตอร์เอาต์พุต หรือทั้งสองอย่างได้

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

สมมติว่าคุณมีชื่อขั้นตอน myProcedure ในฐานข้อมูล คุณสามารถเตรียมคำสั่ง callable ได้ดังนี้:

//การเตรียม CallableStatementCallableStatement cstmt =con.prepareCall("{call myProcedure(?, ?, ?)}");

จากนั้นคุณสามารถตั้งค่าให้กับตัวยึดตำแหน่งโดยใช้เมธอด setter ของอินเทอร์เฟซ CallableStatement และรันคำสั่ง callable โดยใช้เมธอด execute() ดังที่แสดงด้านล่าง

cstmt.setString(1, "Raghav");cstmt.setInt(2, 3000);cstmt.setString(3, "Hyderabad");cstmt.execute();

หากไม่มีค่าอินพุตสำหรับโพรซีเดอร์ คุณสามารถเตรียมคำสั่งที่เรียกได้และดำเนินการตามที่แสดงด้านล่าง:

CallableStatement cstmt =con.prepareCall("{call myProcedure()}");cstmt.execute();

ตัวอย่าง

สมมติว่าเรามีตารางชื่อ Dispatches ในฐานข้อมูล MySQL ด้วยข้อมูลต่อไปนี้:

<ก่อนหน้า>+--------------+--------------------------+----------- ------+----------------+| Product_Name | Date_Of_Dispatch | Time_Of_Dispatch | ที่ตั้ง |+-------------+-----------+------------- -----+----------------+| คีย์บอร์ด | 1970-01-19 | 08:51:36 | ไฮเดอราบัด || หูฟัง | 1970-01-19 | 05:54:28 | วิศาขาปัตตนัม || เมาส์ | 1970-01-19 | 04:26:38 | วิชัยวาทะ |+--------------+-----------------+------------- -----+----------------+

และหากเราสร้างโพรซีเดอร์ชื่อ myProcedure เพื่อดึงค่าจากตารางนี้ดังที่แสดงด้านล่าง:

สร้างโพรซีเดอร์ myProcedure ()-> BEGIN-> SELECT * FROM Dispatches;-> END //

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่าง JDBC เรียกใช้ขั้นตอนการจัดเก็บที่กล่าวถึงข้างต้นโดยใช้โปรแกรม JDBC

<ก่อนหน้า> นำเข้า java.sql.CallableStatement นำเข้า java.sql.Connection นำเข้า java.sql.DriverManager นำเข้า java.sql.ResultSet นำเข้า java.sql.SQLException คลาสสาธารณะ CallingProcedure { โมฆะคงสาธารณะหลัก (สตริง args ]) พ่น SQLException { //การลงทะเบียนไดรเวอร์ DriverManager.registerDriver (ใหม่ com.mysql.jdbc.Driver ()); //รับการเชื่อมต่อสตริง mysqlUrl ="jdbc:mysql://localhost/sampleDB"; การเชื่อมต่อ con =DriverManager.getConnection (mysqlUrl, "root", "password"); System.out.println("การเชื่อมต่อสำเร็จ......"); //เตรียม CallableStateement CallableStatement cstmt =con.prepareCall("{call myProcedure()}"); //ดึงผลลัพธ์ ResultSet rs =cstmt.executeQuery(); ในขณะที่ (rs.next ()) { System.out.println ("ชื่อผลิตภัณฑ์:"+ rs.getString ("Product_Name")); System.out.println("วันที่จัดส่ง:"+rs.getDate("Date_Of_Dispatch")); System.out.println("เวลาจัดส่ง:"+rs.getTime("Time_Of_Dispatch")); System.out.println("ตำแหน่ง:"+rs.getString("ตำแหน่ง")); System.out.println(); } }}

ผลลัพธ์

เชื่อมต่อแล้ว......ชื่อผลิตภัณฑ์:KeyBoardDate of Dispatch:1970-01-19Time of Dispatch:08:51:36 Location:HyderabadProduct Name:HeadphonesDate of Dispatch:1970-01-19Time of Dispatch:05:54 :28ที่ตั้ง:VishakhapatnamProduct Name:MouseDate of Dispatch:1970-01-19Time of Dispatch:04:26:38Location:Vijayawada