บทนำสู่งบ
แบบสอบถาม SQL ทั้งหมดสามารถแบ่งออกเป็นสองกลุ่มตามเงื่อนไข:
- การดึงข้อมูล - ซึ่งรวมถึง คำสั่ง SELECT
- การแก้ไขข้อมูล - ซึ่งรวมถึง คำ สั่งINSERT , UPDATEและDELETE
สำหรับกลุ่มแรก เราจะใช้เมธอด อิน เทอร์เฟซของ Statementที่เราคุ้นเคยอยู่แล้ว- executeQuery() โดยหลักการแล้ววิธีนี้ก็เพียงพอแล้วสำหรับการเริ่มต้น ครอบคลุมคำถามจำนวนมากที่คุณจะต้องใช้ในงานจริง
เราจะพูดถึงตัวเลือกเพิ่มเติมในภายหลัง แต่สำหรับตอนนี้ ฉันแนะนำให้คุณจำไว้ - หากคุณต้องการรับข้อมูลจากตาราง เมธอด executeQuery ( )ในกรณีส่วนใหญ่จะเป็นตัวเลือกที่เหมาะสม
สำหรับคำขอกลุ่มที่สอง คุณต้องใช้วิธีอื่นของอินเทอร์เฟซคำสั่ง - executeUpdate () ซึ่งแตกต่างจาก เมธอด executeQuery()ซึ่งส่งคืน ResultSet เมธอดนี้ส่งคืนจำนวนเต็มที่จะบอกคุณว่าจำนวนแถวในตารางมีการเปลี่ยนแปลงเมื่อดำเนินการค้นหาของคุณ
ตัวอย่างเช่น คุณสามารถลบแถวทั้งหมด ด้วยคำสั่งพนักงาน DELETE FROM (โปรดระวังให้มาก) ในกรณีนี้ เมธอด executeUpdate()จะส่งคืนจำนวนแถวที่ถูกลบ ในบางสถานการณ์ การทราบจำนวนแถวที่เปลี่ยนแปลงอาจมีประโยชน์สำหรับการสร้างอัลกอริทึมสำหรับการทำงานกับข้อมูล
โดยหลักการแล้วเราสามารถตอบคำถามนี้ได้ - เราได้เห็นสิ่งสำคัญแล้ว สำหรับการดึงข้อมูล - executeQuery( ) หากต้องการเปลี่ยนข้อมูล - executeUpdate( )
รับจำนวนผู้ใช้ใน ตาราง ผู้ใช้โดยใช้ เมธอด executeQuery() :
ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
results.next();
int count = results.getInt(1);
ดำเนินการอัปเดต ()
เมธอดexecuteUpdate()จะใช้เมื่อแบบสอบถามของคุณเปลี่ยนแปลงบางอย่างในตาราง อาจเป็นอะไรก็ได้:
- คำสั่งUPDATE
- คำสั่งINSERT
- ลบคำสั่ง
- คำสั่งCALL PROCEDURE
เมธอดนี้ส่งคืนจำนวนแถวที่เปลี่ยนแปลง (หรือถูกลบ)
มาเขียนคำขอที่จะเพิ่มเงินเดือนของพนักงานของเราทั้งหมด 1,000 รูเบิล
int rowsCount = statement.executeUpdate("UPDATE employee SET salary = salary+1000");
หลังจากที่ฉันรันโค้ดนี้ รหัสกลับเป็น 6 บนโต๊ะของฉัน ตารางของฉันมี 6 แถว เลยเปลี่ยนแนวไปหมด
ดำเนินการ ()
บางครั้งสถานการณ์อาจเกิดขึ้นในชีวิตของคุณเมื่อคุณไม่รู้ว่าคุณต้องดำเนินการตามคำขอใด - การเลือกหรือการเปลี่ยนแปลงข้อมูล ในกรณีนี้ ผู้สร้าง JDBC ได้เพิ่มเมธอดทั่วไปเข้าไปอีก - execute( )
วิธีนี้สามารถใช้แทนเมธอดexecuteQuery()และexecuteUpdate() คุณจำได้ไหมว่าวิธีการเหล่านี้แตกต่างกันอย่างไร? ขวา. ประเภทผลลัพธ์ ดังนั้นผู้สร้าง JDBC จึงคิดวิธีแก้ปัญหาดังกล่าว
วิธีการดำเนินการ ()ส่งคืนบูลีน หากค่านี้เป็นจริงแสดงว่าคำขอดึงข้อมูลอยู่ในระหว่างดำเนินการ และคุณต้องเรียกเมธอดgetResultSet()เพื่อรับข้อมูล ตัวอย่าง:
boolean hasResults = statement.execute("SELECT Count(*) FROM user");
if ( hasResults ) {
ResultSet results = statement.getResultSet();
results.next();
int count = results.getInt(1);
}
หากค่านี้เป็นเท็จแสดงว่าคำขอเปลี่ยนแปลงข้อมูลอยู่ในระหว่างดำเนินการ และคุณต้องเรียกเมธอดgetUpdateCount()เพื่อรับจำนวนแถวที่เปลี่ยนแปลง ตัวอย่าง:
boolean hasResults = statement.execute("UPDATE employee SET salary = salary+1000");
if ( !hasResults ) {
int count = statement.getUpdateCount();
}
ลองเขียนวิธีการที่แสดงผลของแบบสอบถาม:
public void executeAndPrintSQLQuery(String sqlQuery) {
boolean hasResults = statement.execute(sqlQuery);
if ( hasResults ) {
ResultSet results = statement.getResultSet();
System.out.println(“Your request lines below: ”);
while (results.next()) {
Integer id = results.getInt(1);
String name = results.getString(2);
System.out.println(results.getRow() + ". " + id + "\t"+ name);
}
}
else {
int count = statement.getUpdateCount();
System.out.println(“Number of name strings: ” + count);
}
}
นี่คือ วิธี ที่มักจะใช้ เมธอด execute() ในทางปฏิบัติ
GO TO FULL VERSION