บทนำสู่งบ

แบบสอบถาม 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() ในทางปฏิบัติ