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

PreparedStatement ใน JDBC คืออะไร?


คำชี้แจงที่เตรียมไว้ ส่วนต่อประสานขยายส่วนต่อประสานคำชี้แจงซึ่งแสดงถึงคำสั่ง 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 วินาที)