หากการเชื่อมต่อ JDBC อยู่ในโหมด AutoCommit จะเป็นค่าเริ่มต้นดังนั้นคำสั่ง SQL ทุกคำจะมุ่งมั่นไปยังฐานข้อมูลเมื่อเสร็จสิ้น
นี่อาจเป็นแอพพลิเคชั่นง่าย ๆ แต่ด้วยเหตุผลสามประการที่คุณอาจต้องการปิดการกระทำอัตโนมัติและจัดการธุรกรรมของคุณเอง:
เพื่อควบคุมธุรกรรมและเมื่อมีการเปลี่ยนแปลงกับฐานข้อมูล ใช้คำสั่ง SQL เดียวหรือชุดคำสั่ง SQL เป็นหน่วยตรรกะและหากคำสั่งใด ๆ ล้มเหลวการทำธุรกรรมทั้งหมดล้มเหลว
ในการเปิดใช้งานแทนที่จะเป็นไดรเวอร์ JDBC โดยใช้การสนับสนุนการทำธุรกรรมด้วยตนเองโหมดอัตโนมัติโดยค่าเริ่มต้นให้ใช้เมธอด setautocommit () ของวัตถุการเชื่อมต่อ หากค่าบูลีนถูกส่งผ่านไปยัง setautocommit () ให้ปิดการกระทำอัตโนมัติ ค่าบูลีนสามารถส่งผ่านไปยัง True เพื่อเปิดใหม่ได้
ตัวอย่างเช่นหากมีวัตถุชื่อ Connect การเชื่อมต่อ Conn รหัสต่อไปนี้จะปิดการกระทำอัตโนมัติ:
conn.setautocommit (เท็จ);
ส่งและย้อนกลับ
เมื่อการเปลี่ยนแปลงเสร็จสมบูรณ์คุณต้องการทำการเปลี่ยนแปลงแล้วเรียกใช้วิธีการ commit (บนวัตถุเชื่อมต่อ) ดังนี้:
Conn.Commit ();
มิฉะนั้นการอัปเดตการย้อนกลับที่ทำกับฐานข้อมูลใช้ชื่อ Connection Conn โดยใช้รหัสต่อไปนี้:
conn.rollback ();
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการใช้วัตถุการกระทำและการย้อนกลับ:
ลอง {// สมมติว่าวัตถุการเชื่อมต่อที่ถูกต้อง Conn.SetAutocommit (เท็จ); คำสั่ง stmt = conn.createstatement (); String SQL = "แทรกเข้าไปในพนักงาน" + "ค่า (106, 20, 'rita', 'tez')"; stmt.executeUpdate (SQL); // ส่งคำสั่ง SQL ที่ไม่ถูกต้องซึ่งทำลายสตริง SQL = "แทรกในพนักงาน" + "ค่า (107, 22, 'SITA', 'SINGH')"; stmt.executeUpdate (SQL); // หากไม่มีข้อผิดพลาด conn.Commit ();} catch (sqlexception se) {// หากมีข้อผิดพลาดใด ๆ conn.rollback ();}ในกรณีนี้ไม่มีคำสั่งแทรกข้างต้นจะประสบความสำเร็จและทุกอย่างจะถูกย้อนกลับ
ตัวอย่างการทำธุรกรรมและการย้อนกลับ
ต่อไปนี้เป็นตัวอย่างของการใช้คำอธิบายการทำธุรกรรมและคำอธิบายย้อนกลับ
รหัสตัวอย่างนี้ได้รับการเรียนรู้ตามสภาพแวดล้อมและการติดตั้งฐานข้อมูลในบทก่อนหน้า
คัดลอก jdbcexample.java จากตัวอย่างต่อไปนี้ในอดีตคอมไพล์และเรียกใช้ดังที่แสดงด้านล่าง:
// ขั้นตอนที่ 1. นำเข้าแพ็คเกจที่ต้องการ java.sql.*; คลาสสาธารณะ JDBCEXAMPLE {// ชื่อไดรเวอร์ JDBC และ URL ฐานข้อมูลคงที่สตริงสุดท้าย jdbc_driver = "com.mysql.jdbc.driver"; สตริงสุดท้ายคงที่ db_url = "jdbc: mysql: // localhost/emp"; // ข้อมูลรับรองฐานข้อมูลสตริงสุดท้ายคงที่ user = "ชื่อผู้ใช้"; สตริงสุดท้ายคงที่ = "รหัสผ่าน"; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {การเชื่อมต่อ conn = null; คำสั่ง stmt = null; ลอง {// ขั้นตอนที่ 2: ลงทะเบียนคลาสไดรเวอร์ JDBC forName ("com.mysql.jdbc.driver"); // ขั้นตอนที่ 3: เปิดระบบการเชื่อมต่อ. out.println ("การเชื่อมต่อกับฐานข้อมูล ... "); conn = drivermanager.getConnection (db_url, ผู้ใช้, ผ่าน); // ขั้นตอนที่ 4: ตั้งค่าอัตโนมัติให้เป็นเท็จ conn.setautocommit (เท็จ); // ขั้นตอนที่ 5: ดำเนินการค้นหาเพื่อสร้างสถิติด้วย // อาร์กิวเมนต์ที่จำเป็นสำหรับตัวอย่าง RS System.out.println ("การสร้างคำสั่ง ... "); stmt = conn.createstatement (resultset.type_scroll_insensitive, resultet.curcur_updatable); // ขั้นตอนที่ 6: แทรกแถวลงในตารางของพนักงาน System.out.println ("แทรกหนึ่งแถว .... "); String SQL = "แทรกเข้าไปในพนักงาน" + "ค่า (106, 20, 'rita', 'tez')"; stmt.executeUpdate (SQL); // ขั้นตอนที่ 7: แทรกอีกหนึ่งแถวลงในตารางพนักงาน sql = "แทรกลงในพนักงาน" + "ค่า (107, 22, 'sita', 'singh')"; stmt.executeUpdate (SQL); // ขั้นตอนที่ 8: ส่งข้อมูลที่นี่ System.out.println ("การสั่งซื้อข้อมูลที่นี่ .... "); Conn.Commit (); // ขั้นตอนที่ 9: ตอนนี้แสดงรายการบันทึกที่มีอยู่ทั้งหมด String SQL = "SELECT ID, FIRST, LANT, อายุจากพนักงาน"; resultset rs = stmt.executeQuery (SQL); System.out.println ("รายการผลลัพธ์สำหรับการอ้างอิง ... "); Printrs (RS); // ขั้นตอนที่ 10: สภาพแวดล้อมการทำความสะอาด rs.close (); stmt.close (); conn.close (); } catch (sqlexception se) {// จัดการข้อผิดพลาดสำหรับ jdbc se.printstacktrace (); // หากมีข้อผิดพลาดให้ย้อนกลับการเปลี่ยนแปลง System.out.println ("ย้อนกลับข้อมูลที่นี่ ... "); ลอง {ถ้า (conn! = null) conn.rollback (); } catch (sqlexception se2) {se2.printstacktrace (); } // end try} catch (exception e) {// จัดการข้อผิดพลาดสำหรับ class.forName E.printStackTrace (); } ในที่สุด {// ในที่สุดบล็อกที่ใช้ในการปิดทรัพยากรลอง {ถ้า (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // ไม่มีอะไรที่เราสามารถลอง {ถ้า (conn! = null) conn.close (); } catch (sqlexception se) {se.printstacktrace (); } // สิ้นสุดในที่สุดลอง} // end try system.out.println ("ลาก่อน!");} // สิ้นสุดโมฆะ printrs สาธารณะหลัก (Resultet Rs) พ่น sqlexception {// ตรวจสอบให้แน่ใจว่าเราเริ่มต้นด้วยแถวแรก ในขณะที่ (Rs.Next ()) {// ดึงโดยชื่อคอลัมน์ ID ID = rs.getInt ("id"); อายุ int = Rs.getInt ("อายุ"); String First = Rs.getString ("First"); String last = rs.getString ("สุดท้าย"); // แสดงค่า system.out.print ("id:" + id); System.out.print (", อายุ:" + อายุ); System.out.print (", First:" + First); System.out.println (", สุดท้าย:" + สุดท้าย); } system.out.println (); } // end printrs ()} // end jdbcexampleตอนนี้เรามารวบรวมตัวอย่างข้างต้นกันดังนี้:
c:> javac jdbcexample.java
เมื่อเรียกใช้ JDBCEXAMPLE มันจะให้ผลลัพธ์ต่อไปนี้:
c:> java jdbcexample
การเชื่อมต่อกับฐานข้อมูล ... การสร้างคำสั่ง ... การแทรกหนึ่งแถว .... การส่งข้อมูลที่นี่ .... รายการผลลัพธ์สำหรับการอ้างอิง .... รหัส: 100, อายุ: 18, แรก: Zara, สุดท้าย: Aliid: 101, อายุ: 25, First: Mahnaz, Last: Fatmaid: 102, อายุ: 30, First: Zaid, Last: Khanid Tezid: 107, อายุ: 22, First: Sita, Last: Singhgoodbye!