คำชี้แจงที่เตรียมไว้ ส่วนต่อประสานขยายส่วนต่อประสานคำชี้แจงซึ่งแสดงถึงคำสั่ง SQL ที่คอมไพล์ล่วงหน้าซึ่งสามารถดำเนินการได้หลายครั้ง สิ่งนี้ยอมรับ SQL quires แบบกำหนดพารามิเตอร์ และคุณสามารถส่งพารามิเตอร์ 0 ตัวขึ้นไปไปยังเคียวรีนี้ได้
เริ่มแรก คำสั่งนี้ใช้ตัวยึดตำแหน่ง “?” แทนที่จะเป็นพารามิเตอร์ ในภายหลัง คุณสามารถส่งอาร์กิวเมนต์ไปยังสิ่งเหล่านี้ไดนามิกโดยใช้เมธอด setXXX() ของ PreparedStatement อินเทอร์เฟซ
การสร้างข้อความที่เตรียมไว้
คุณสามารถสร้างออบเจ็กต์ของ PreparedStatement (อินเทอร์เฟซ) โดยใช้ prepareStatement() วิธีการของอินเทอร์เฟซการเชื่อมต่อ เมธอดนี้ยอมรับการสืบค้น (กำหนดพารามิเตอร์) และส่งคืนอ็อบเจ็กต์ PreparedStatement
เมื่อคุณเรียกใช้เมธอดนี้ อ็อบเจ็กต์ Connection จะส่งแบบสอบถามที่กำหนดไปยังฐานข้อมูลเพื่อคอมไพล์และบันทึก หากคอมไพล์เคียวรีสำเร็จก็จะส่งคืนอ็อบเจกต์เท่านั้น
ในการรวบรวมแบบสอบถาม ฐานข้อมูลไม่ต้องการค่าใด ๆ ดังนั้นคุณสามารถใช้ (ศูนย์หรือมากกว่า) ตัวยึดตำแหน่ง (เครื่องหมายคำถาม ” ?” ) แทนค่าในแบบสอบถาม
ตัวอย่างเช่น หากคุณมีตารางชื่อ พนักงาน ในฐานข้อมูลที่สร้างขึ้นโดยใช้แบบสอบถามต่อไปนี้
สร้างพนักงานตาราง(ชื่อ VARCHAR(255), INT เงินเดือนไม่เป็นโมฆะ, ที่ตั้ง VARCHAR(255));
จากนั้น คุณควรใช้คำชี้แจงที่เตรียมไว้เพื่อแทรกค่าลงไปดังที่แสดงด้านล่าง
//Creating a prepared StatementString query="INSERT INTO Employee(Name, Salary, Location)VALUES(?, ?, ?)";Statement pstmt =con.prepareStatement(query);
การตั้งค่าให้กับตัวยึดตำแหน่ง
คำชี้แจงที่เตรียมไว้ อินเทอร์เฟซมีวิธี setter หลายวิธี เช่น setInt(), setFloat(), setArray(), setDate(), setDouble() เป็นต้น เพื่อตั้งค่าให้กับตัวยึดตำแหน่งของคำสั่งที่เตรียมไว้
วิธีการเหล่านี้ยอมรับสองอาร์กิวเมนต์ หนึ่งคือค่าจำนวนเต็มที่แสดงถึงดัชนีตำแหน่งของโฟลเดอร์สถานที่ และอีกวิธีหนึ่งคือ int หรือ String หรือ float ฯลฯ ... แทนค่าที่คุณต้องการแทรกที่ตำแหน่งนั้น
คุณสามารถตั้งค่าให้กับที่พักของคำสั่งที่สร้างขึ้นข้างต้นโดยใช้วิธี setter ดังที่แสดงด้านล่าง:
pstmt.setString(1, "Amit");pstmt.setInt(2, 3000);pstmt.setString(3, "Hyderabad");pstmt.setString(1, "Kalyan");pstmt.setInt(2 , 4000);pstmt.setString(3, "Vishakhapatnam");pstmt.setString(1, "Renuka");pstmt.setInt(2, 5000);pstmt.setString(3, "Delhi");pstmt.setString( 1 "อาร์ชานา");pstmt.setInt(2, 15000);pstmt.setString(3 "มุมไบ");
การดำเนินการตามคำชี้แจงที่เตรียมไว้
เมื่อคุณสร้างอ็อบเจ็กต์ PreparedStatement แล้ว คุณสามารถดำเนินการได้โดยใช้ execute() อันใดอันหนึ่ง เมธอดของอินเทอร์เฟซ PreparedStatement คือ execute() , ดำเนินการอัปเดต() และ, executeQuery()
-
ดำเนินการ (): เมธอดนี้รันคำสั่ง SQL แบบสแตติกปกติในอ็อบเจ็กต์คำสั่งที่เตรียมไว้ในปัจจุบันและส่งกลับค่าบูลีน
-
executeQuery(): เมธอดนี้รันคำสั่งที่เตรียมไว้ในปัจจุบันและส่งคืนออบเจกต์ ResultSet
-
executeUpdate(): เมธอดนี้เรียกใช้คำสั่ง SQL DML เช่น แทรกการอัปเดตหรือลบในคำสั่งที่เตรียมไว้ปัจจุบัน ส่งคืนค่าจำนวนเต็มแทนจำนวนแถวที่ได้รับผลกระทบ
คุณสามารถดำเนินการคำสั่งที่เตรียมไว้ข้างต้นดังที่แสดงด้านล่าง:
ตัวอย่าง
ในตัวอย่างนี้ เรากำลังพยายามแทรกค่าลงในตารางชื่อ Employee โดยใช้คำสั่งที่เตรียมไว้
<ก่อน> นำเข้า java.sql.Connection; นำเข้า java.sql.DriverManager นำเข้า java.sql.PreparedStatement นำเข้า java.sql.SQLException คลาสสาธารณะ PreparedStatementExample { โมฆะคงสาธารณะหลัก (สตริง args []) พ่น SQLException { // การลงทะเบียนไดร์เวอร์ DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //รับการเชื่อมต่อสตริง mysqlUrl ="jdbc:mysql://localhost/testdb"; การเชื่อมต่อ con =DriverManager.getConnection (mysqlUrl, "root", "password"); System.out.println("การเชื่อมต่อสำเร็จ......"); //การสร้างข้อความค้นหาสตริงที่เตรียมไว้ ="INSERT INTO Employees(Name, Salary, Location) VALUES (?, ?, ?)"; preparedStatement pstmt =con.prepareStatement (แบบสอบถาม); pstmt.setString(1, "อามิต"); pstmt.setInt(2, 3000); pstmt.setString(3, "ไฮเดอราบาด"); pstmt.setString(1, "กลยาน"); pstmt.setInt(2, 4000); pstmt.setString(3, "วิศาขาปัตตนัม"); pstmt.setString(1, "เรนูกะ"); pstmt.setInt(2, 5000); pstmt.setString(3, "เดลี"); pstmt.setString(1, "อาชา"); pstmt.setInt(2, 15000); pstmt.setString(3, "มุมไบ"); int num =pstmt.executeUpdate(); System.out.println("แถวที่แทรก ...."); }}ผลลัพธ์
เชื่อมต่อแล้ว......จำนวนแถวที่แทรก:1
หากคุณตรวจสอบฐานข้อมูล คุณสามารถสังเกตค่าที่แทรกในตารางเป็น:
<ก่อนหน้า>+---------+---------+----------------+| ชื่อ | เงินเดือน | ที่ตั้ง |+---------+---------+----------------+| อามิต | 30000 | ไฮเดอราบัด || กัลยัน | 40000 | วิศาขาปัตตนัม || เรนูกะ | 50000 | เดลี || อาชาน่า | 15000 | มุมไบ |+---------+-------+----------------+5 แถวในชุด (0.00 วินาที)