บทความนี้อธิบายถึงการดำเนินการตามการทำธุรกรรมการโอนเงินของธนาคารและสินค้าเข้าและออกจากคลังสินค้าตาม JDBC แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
1. การโอนธุรกิจ
เมื่อการถ่ายโอนต้องดำเนินการตามคำสั่ง SQL 2 (อัปเดตอัปเดต) และทั้งสองรายการจะสำเร็จการทำธุรกรรมจะถูกส่ง หากล้มเหลวทั้งคู่จะย้อนกลับการทำธุรกรรม
2. การทำธุรกรรมควรมี 4 แอตทริบิวต์ : อะตอมมิกความสม่ำเสมอการแยกและการคงอยู่ คุณลักษณะทั้งสี่นี้มักจะเรียกว่าแอตทริบิวต์กรด
①อะตอม การทำธุรกรรมเป็นหน่วยงานที่แยกกันไม่ออกและการดำเนินการทั้งหมดที่รวมอยู่ในการทำธุรกรรมจะทำหรือไม่
②ความสอดคล้อง การทำธุรกรรมจะต้องเปลี่ยนฐานข้อมูลจากสถานะที่สอดคล้องกันหนึ่งไปอีกสถานะหนึ่ง ความสอดคล้องมีความสัมพันธ์อย่างใกล้ชิดกับอะตอม
③การแยก การดำเนินการของธุรกรรมไม่สามารถแทรกแซงโดยธุรกรรมอื่น ๆ นั่นคือการดำเนินการภายในธุรกรรมและข้อมูลที่ใช้นั้นแยกได้จากธุรกรรมอื่น ๆ พร้อมกันและธุรกรรมที่ดำเนินการพร้อมกันไม่สามารถรบกวนกันและกันได้
④ความทนทาน ความคงทนเรียกว่าความคงทนซึ่งหมายความว่าเมื่อมีการทำธุรกรรมการเปลี่ยนแปลงข้อมูลในฐานข้อมูลควรเป็นแบบถาวร การดำเนินการหรือความล้มเหลวอื่น ๆ ที่ตามมาไม่ควรมีผลกระทบใด ๆ ต่อพวกเขา
3. นี่คือคำอธิบายตัวอย่างโดยใช้การถ่ายโอนเป็นกรณีและจุดสนใจมีดังนี้:
(1) การดำเนินการคำสั่ง SQL ไม่จำเป็นต้องส่งการทำธุรกรรมด้วยตนเอง
(2) การดำเนินการแบบสอบถามไม่จำเป็นต้องมีการส่งธุรกรรมด้วยตนเอง
(3) อย่างไรก็ตามการอัปเดตแทรกและลบจำเป็นต้องมีการส่งธุรกรรมด้วยตนเอง
(4) หากยอดคงเหลือเป็นลบคุณสามารถสอบถามผลลัพธ์ได้ก่อนจากนั้นทำการตัดสินแล้วดำเนินการ
(5) con.setAutoCommit(false); เริ่มทำธุรกรรมด้วยตนเอง con.commit(); ทำธุรกรรมด้วยตนเอง con.rollback(); การดำเนินการย้อนกลับธุรกรรม
4. ก่อนสร้างตารางข้อมูลหรือตารางข้อมูลสองตาราง ที่นี่สร้างตารางข้อมูลสองตารางเพื่อความชัดเจนของการสาธิต
5. สร้างฐานข้อมูลและตารางข้อมูลจากนั้นเขียนคลาสเครื่องมือที่ใช้เครื่องมือ
แพ็คเกจ com.bie.utils; นำเข้า java.sql.connection; นำเข้า java.sql.drivermanager; นำเข้า java.sql.preparedStatement; นำเข้า java.sql.resultset; นำเข้า java.sql.sqlexception;/*** @author biehongli สำหรับการเชื่อมต่อกับฐานข้อมูล*/คลาสสาธารณะที่ใช้ {private string driver = "com.mysql.jdbc.driver"; url สตริงแบบคงที่ส่วนตัว = "jdbc: mysql: /// test"; ผู้ใช้สตริงแบบคงที่ส่วนตัว = "รูท"; รหัสผ่านสตริงคงที่ส่วนตัว = "123456"; /*** * วิธีการเชื่อมต่อกับฐานข้อมูล * @return * @throws classnotFoundException * @throws sqlexception */การเชื่อมต่อแบบคงที่สาธารณะ getCon () พ่น classnotFoundException, sqlexception {class.forname (ไดรเวอร์); // โหลดระบบไดรเวอร์ฐานข้อมูล การเชื่อมต่อ con = drivermanager.getConnection (URL, ผู้ใช้, รหัสผ่าน); System.out.println ("ลิงก์ฐานข้อมูลทดสอบสำเร็จ"); กลับมา con; }/ *** * วิธีการปิดฐานข้อมูล * @param con * @param ps * @param rs */ public static void close (connection con, preparedStatement ps, resultset rs) {ถ้า (rs! = null) {// ปิดทรัพยากรเพื่อหลีกเลี่ยงข้อยกเว้น {rs.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (ps! = null) {ลอง {ps.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (con! = null) {ลอง {con.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }}} / *** * เห็นด้วยกับวิธีการเพิ่มการลบและการแก้ไข * @param sql * @param arr * @return * / public public boolean addupdatedelete (สตริง sql, object [] arr) {connection con = null; PreparedStatement PS = NULL; ลอง {con = basedao.getCon (); // ขั้นตอนที่ 1: การดำเนินการเพื่อเชื่อมต่อกับฐานข้อมูล ps = con.preparestatement (sql); // ขั้นตอนที่ 2: preompile // ขั้นตอนที่ 3: ตั้งค่าถ้า (arr! = null && arr.length! = 0) {สำหรับ (int i = 0; }} int count = ps.executeUpdate (); // ขั้นตอนที่ 4: เรียกใช้คำสั่ง SQL ถ้า (นับ> 0) {ส่งคืนจริง; } else {return false; }} catch (classnotfoundexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } return false; } /*โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ลอง {askasedao.getCon (); } catch (classnotfoundexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); -6. การทดสอบดำเนินการโดยตรงในวิธีการหลักดังนั้นฉันจึงเขียน UserDao สำหรับการทดสอบและดูที่เอฟเฟกต์
แพ็คเกจ com.bie.dao; นำเข้า java.sql.connection; นำเข้า java.sql.preparedStatement; นำเข้า java.sql.sqlexception; นำเข้า com.bie.utils.basedao;/*** @author biehongli*@Version * หมายเหตุ: * (1) การดำเนินการคำสั่ง SQL ไม่จำเป็นต้องมีการส่งธุรกรรมด้วยตนเอง * (2) การดำเนินการสอบถามไม่จำเป็นต้องมีการส่งธุรกรรมด้วยตนเอง * (3) อย่างไรก็ตามการอัปเดตแทรกและลบต้องส่งการทำธุรกรรมด้วยตนเอง * (4) หากยอดคงเหลือเป็นค่าลบ PreparedStatement PS1 = NULL; PreparedStatement PS2 = NULL; ลอง {// ขั้นตอนที่ 1: การทำงานของการเชื่อมต่อกับฐานข้อมูล con = basedao.getCon (); // การทำธุรกรรมจะถูกส่งโดยอัตโนมัติโดยค่าเริ่มต้นดังนั้นค่าเริ่มต้นจึงเป็นจริง ตอนนี้เปลี่ยนจริงเป็นเท็จและการทำธุรกรรมอัตโนมัติเริ่มต้นเป็นสิ่งต้องห้าม //con.setautocommit(true); // ธุรกรรม 1: หากตั้งค่าเป็นเท็จการทำธุรกรรมจะต้องส่งด้วยตนเอง con.setautocommit (เท็จ); // ขั้นตอนที่ 2: สตริงคำสั่ง SQL ที่อัปเดต SQL = "อัปเดต bank_a set usera_rmb = usera_rmb-500 โดยที่ usera_id = 1"; String sql2 = "อัปเดต bank_b set userb_rmb = userb_rmb+500 โดยที่ userb_id = 1"; // ขั้นตอนที่ 3: Precompile SQL PS1 = Con.preparestatement (SQL); // ขั้นตอนที่ 4: เรียกใช้คำสั่ง SQL แม้ว่า SQL จะถูกดำเนินการ แต่ก็ยังไม่ได้รับการยืนยันและอัปเดตไปยังฐานข้อมูล PS1.ExecuteUpdate (); // ขั้นตอนที่ 3: Precompile SQL2 PS2 = Con.preparestatement (SQL2); // ขั้นตอนที่ 4: ดำเนินการ SQL2 แม้ว่า SQL2 จะถูกดำเนินการ แต่ก็ยังไม่ได้รับการยืนยันและอัปเดตไปยังฐานข้อมูล PS2.ExecuteUpdate (); System.out.println ("โอนสำเร็จ ... "); // ธุรกรรม 2: ทำธุรกรรมด้วยตนเอง หากการประหารชีวิตทั้งสองประสบความสำเร็จให้ทำธุรกรรม con.commit (); } catch (classnotFoundException e) {e.printStackTrace (); ลอง {// ธุรกรรม 3: หากมีการโยนข้อยกเว้นจากนั้นย้อนกลับการทำธุรกรรม con.rollback (); } catch (sqlexception e1) {e1.printstacktrace (); }} catch (sqlexception e) {e.printstacktrace (); } ในที่สุด {// ปิดทรัพยากรเพื่อหลีกเลี่ยงข้อยกเว้นที่ใช้ Agemase.close (con, ps1, null); basedao.close (null, ps2, null); -ผลการสาธิตมีดังนี้:
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาที่เกี่ยวข้องกับ Java โปรดตรวจสอบหัวข้อของเว็บไซต์นี้: "สรุปทักษะของ Java ในการใช้งานฐานข้อมูลโดยใช้ JDBC", "," บทสรุปของการเขียนโปรแกรมฐานข้อมูล Java+MySQL "," การดำเนินการเกี่ยวกับโครงสร้างข้อมูล Java ทักษะการใช้งานแคช "
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน