تصف هذه المقالة تنفيذ Java للمعاملات والتحويلات المصرفية والسلع داخل وخارج المستودعات بناءً على JDBC. شاركه للرجوع إليه ، على النحو التالي:
1. نقل الأعمال
عندما يتعين على النقل تنفيذ 2 عبارات SQL (تحديثات التحديث) وكلاهما ناجح ، يتم تقديم المعاملة. إذا فشل المرء ، فإن كلاهما سيعيد المعاملة.
2. يجب أن يكون للمعاملة 4 سمات : الذرة والاتساق والعزلة والمثابرة. هذه السمات الأربع عادة ما تسمى سمات الحمض.
① atomicity. المعاملة هي وحدة العمل التي لا تنفصل ، وجميع العمليات المدرجة في المعاملة إما يتم إما أو لا.
② الاتساق. يجب أن تكون المعاملة لتغيير قاعدة البيانات من حالة ثابتة إلى أخرى. يرتبط الاتساق ارتباطًا وثيقًا بالذرية.
③ العزلة. لا يمكن أن يتداخل تنفيذ المعاملة من خلال المعاملات الأخرى. أي أن العمليات داخل المعاملة والبيانات المستخدمة معزولة عن المعاملات المتزامنة الأخرى ، ولا يمكن أن تتداخل المعاملات التي يتم تنفيذها في وقت واحد مع بعضها البعض.
④ المتانة. يسمى الدوام أيضًا ، مما يعني أنه بمجرد ارتكاب المعاملة ، يجب أن تكون تغييراتها في البيانات في قاعدة البيانات دائمة. لا ينبغي أن يكون للعمليات أو الإخفاقات اللاحقة الأخرى أي تأثير عليها.
3. هنا وصف تجريبي باستخدام عملية النقل كحالة ، ونقاط الاهتمام هي كما يلي:
(1) لا تتطلب عملية بيان SQL تقديم المعاملة اليدوية
(2) لا تتطلب عملية الاستعلام تقديم المعاملة اليدوية.
(3) ومع ذلك ، فإن تحديث وإدراج وحذف يتطلب تقديم المعاملة اليدوية
(4) إذا كان التوازن سلبيًا ، فيمكنك الاستعلام عن النتائج أولاً ثم إصدار حكم ، ثم يعمل
(5) con.setAutoCommit(false); بدء المعاملة يدويًا ؛ con.commit(); ارتكاب المعاملة يدويًا ؛ con.rollback(); عملية تراجع المعاملات
4. أولاً قم بإنشاء جدول بيانات أو جداول بيانات. هنا ، قم بإنشاء جداول بيانات لوضوح العرض التوضيحي.
5. قم بإنشاء قاعدة بيانات وجدول بيانات ، ثم اكتب فئة الأدوات على أساس
package com.bie.utils ؛ استيراد java.sql.connection ؛ استيراد java.sql.drivermanager ؛ استيراد java.sql.preparedstatement ؛ استيراد java.sql.resultset الاتصال بقاعدة البيانات*/الفئة العامة على أساس سائق سلسلة ثابتة = "com.mysql.jdbc.driver" ؛ url url static static static = "jdbc: mysql: /// test" ؛ user static static user = "root" ؛ كلمة مرور السلسلة الثابتة الخاصة = "123456" ؛ /*: Connection con = drivermanager.getConnection (url ، المستخدم ، كلمة المرور) ؛ system.out.println ("ارتباط قاعدة بيانات الاختبار بنجاح") ؛ العودة يخدع }/ *** * طريقة لإغلاق قاعدة البيانات * param con * param ps * param rs */ إغلاق الفراغ الثابت العام (connection con ، preparedStatement ps ، resultset rs) {if (rs! = null) {// أغلق المورد لتجنب تجربة {rs.close () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }} if (ps! = null) {try {ps.Close () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }} if (con! = null) {try {con.close () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }}} / *** * أوافق على طريقة إضافة وحذف وتعديل * param sql * param arr * return * / public addupdatedelete addupdatedelete (سلسلة sql ، object [] arr) {connection con = null ؛ أعدت PS = NULL ؛ جرب {con = repareao.getcon () ؛ // الخطوة 1: العملية للاتصال بقاعدة البيانات ps = con.preparestatement (sql) ؛ // الخطوة 2: precompile // الخطوة 3: تعيين القيمة if (arr! = null && arr.length! = 0) {for (int i = 0 ؛ i <arr.length ؛ i ++) }} int count = ps.executeupdate () ؛ // الخطوة 4: تنفيذ عبارة SQL if (count> 0) {return true ؛ } آخر {return false ؛ }} catch (classnotfoundException e) {// todo catch catch e.printstacktrace () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ } إرجاع خطأ ؛ } /*public static void main (string [] args) {try {invalio.getCon () ؛ } catch (classnotfoundException e) {// todo catch catch e.printstacktrace () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }}*/}6. يتم إجراء الاختبار مباشرة في الطريقة الرئيسية ، لذلك كتبت userDao للاختبار والنظر فقط في التأثير.
package com.bie.dao ؛ استيراد java.sql.connection ؛ استيراد java.sql.prepedstatement ؛ استيراد java.sql.sqlexception ؛ import com.bie.utils.based.basedao ؛/*** @author biehongli*وقت الإنشاء: 27 فبراير ، 2017 في 3:19 * (1) لا تتطلب عملية بيان SQL تقديم المعاملة اليدوية * (2) لا تتطلب عملية الاستعلام تقديم المعاملة اليدوية ، * (3) ومع ذلك ، فإن التحديث ، والإدراج ، والحذف يتطلب تقديم المعاملة اليدوي * (4) إذا كان التوازن سلبيًا ، يمكنك أن تحد من النتيجة أولاً ثم الحكم عليها ، ثم تشغيلها * param */ public stat. أعدت PS1 = NULL ؛ ReparedStatement PS2 = NULL ؛ جرب {// الخطوة 1: تشغيل الاتصال بقاعدة البيانات con = ripalao.getCon () ؛ // يتم إرسال المعاملة تلقائيًا افتراضيًا ، وبالتالي فإن الافتراضي صحيح. الآن تغيير صحيح إلى خطأ ، ويحظر المعاملة التلقائية الافتراضية //con.setautocommit(true) ؛ // المعاملة 1: إذا تم ضبطها على خطأ ، فيجب إرسال المعاملة يدويًا consetautocommit (false) ؛ . String SQL2 = "تحديث bank_b set userb_rmb = userb_rmb+500 حيث userb_id = 1" ؛ // الخطوة 3: premompile sql ps1 = con.preparestatement (sql) ؛ // الخطوة 4: تنفيذ بيان SQL. على الرغم من أنه تم تنفيذ SQL ، إلا أنه لم يتم استمراره وتحديثه لقاعدة البيانات ps1.executeupdate () ؛ // الخطوة 3: premompile 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 () ؛ } أخيرًا {// أغلق المورد لتجنب الاستثناءات على أساسها. repondao.close (null ، ps2 ، null) ؛ }}}التأثير التجريبي على النحو التالي:
لمزيد من المعلومات حول المحتوى المتعلق بـ Java ، يرجى مراجعة موضوعات هذا الموقع: "ملخص لمهارات Java لتشغيل قواعد البيانات باستخدام JDBC" ، "ملخص Java+MySQL Programming" ، "Summary of java of java". مهارات"
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.