English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

معاملات JDBC

إذا كان اتصال JDBC في وضع التحميل التلقائي (بالتشغيل الافتراضي يكون التحميل التلقائي) فإن كل جملة SQL تُقدم إلى قاعدة البيانات عند إكمالها. قد يكون ذلك جيدًا للبرامج البسيطة، ولكن لثلاثة أسباب قد ترغب في إيقاف التحميل التلقائي وإدارة معاملاتك الخاصة-

  • لتحسين الأداء.

  • لحفظ كامل سير العملية التجارية.

  • استخدام المعاملات الموزعة.

المعاملات تتيح لك التحكم في ما إذا كان سيتم تطبيق التغييرات على قاعدة البيانات وأي وقت سيتم ذلك. إنه يعتبر كل جملة SQL أو مجموعة من جمل SQL كوحدة منطقية، إذا فشل أي جملة، فإن المعاملة بأكملها ستفشل.

للبدء في دعم المعاملات اليدوية بدلاً من استخدام كائن الاتصال التلقائي الذي يستخدمه محرك JDBC-التحقق التلقائيلإعداد النمط، استخدم كائن الاتصالsetAutoCommit()الطريقة. إذا تم تمرير القيمة الحولية false إلى setAutoCommit()، فإنه يغلق ميزة التحقق التلقائي. يمكنك تمرير القيمة الحولية true لإعادة فتحها.

على سبيل المثال، إذا كان لديك كائن الاتصال باسم conn، يمكنك كتابة الرمز التالي لإغلاق التحقق التلقائي-

conn.setAutoCommit(false);

التحقق والتسجيل

اكتمال التغييرات وأتمام التغييرات، يرجىالاستدعاء على طريقة كائن الاتصالcommit()، كما يلي:

conn.commit();

إذا لم يكن لديك خطأ، فاستخدم الرمز التالي للتراجع عن تحديث قاعدة البيانات الذي تم تنفيذه باستخدام Connection باسم conn-

conn.rollback();

الامثلة التالية توضح استخدام كائنات التحقق والتسجيل-

try{
   // افتراض وجود كائن اتصال صالح conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   // تقديم تعليمة SQL غير صحيحة، مما يؤدي إلى التوقف.
   String SQL = "INSERTED IN Employees " +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // بدون أخطاء.
   conn.commit();
}
   // إذا كان هناك أي خطأ.
   conn.rollback();
}

في هذه الحالة، لن ينجح تعليمة INSERT المذكورة أعلاه، وسيتم إلغاء جميع الإجراءات.

للتفهم بشكل أفضل، دعنا ندرس "مثال على التحقق.

استخدام Savepoint

واجهة نقطة الحفظ JDBC 3.0 توفر لك التحكم في المعاملات الإضافية. يدعم معظم أنظمة إدارة قواعد البيانات الحديثة نقاط الحفظ في بيئاتها، مثل PL / SQL لـ Oracle.

عند تعيين نقطة الحفظ، يمكنك تعريف نقطة التراجع المنطقي في المعامل. إذا حدث خطأ بعد نقطة الحفظ، يمكنك استخدام طريقة التراجع لسحب جميع التغييرات أو سحب التغييرات التي تم تنفيذها بعد نقطة الحفظ فقط.

يحتوي كائن الاتصال على طريقتين جديدتين يمكن أن تساعدك في إدارة نقاط الحفظ-

  • setSavepoint(String savepointName):تحديد نقطة حفظ جديدة. إنه أيضًا يعيد نقطة حفظ Savepoint.

  • releaseSavepoint(Savepoint savepointName):حذف نقطة الحفظ. يرجى الانتباه، إنه يحتاج إلى عنوان نقطة الحفظ كمعلمة. عادة ما يتم إنشاء نقطة الحفظ هذه بواسطة طريقة setSavepoint().

rollback (String savepointName)}يستطيع هذا الطريقة رجوع العمل إلى نقطة إنقاذ محددة.

مثال أدنى يوضح استخدام كائن Savepoint-

try{
   // افتراض وجود كائن اتصال صالح conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   // إعداد نقطة إنقاذ
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
   String SQL = "INSERT INTO Employees " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   // تقديم تعليمة SQL غير صحيحة، مما يؤدي إلى التوقف.
   String SQL = "INSERTED IN Employees " +
                "VALUES (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // إذا لم يكن هناك أي خطأ، يرجى تقديم التغييرات.
   conn.commit();
}
   // إذا كان هناك أي خطأ.
   conn.rollback(savepoint1);
}

في هذه الحالة، لن ينجح تعليمة INSERT المذكورة أعلاه، وسيتم إلغاء جميع الإجراءات.

للتفهم بشكل أفضل، دعونا ندرسSavepoints-كود مثال.