java شرح كيف يمكنني إيقاف معاملة JDBC قيد التشغيل؟




ربط جافا مع mysql (4)

هل هناك طريقة لإحباط معاملة قبل الأوان؟ قل ، لقد أرسلت أمرًا إلى قاعدة البيانات التي تعمل خمس دقائق وبعد أربعة ، أريد أن أجهضها.

هل تحدد JDBC طريقة لإرسال إشارة "توقف ما تفعله على هذا الاتصال" إلى DB؟


لا ، لا يمكنك إجهاضها باستخدام JDBC القياسي.

يمكنك محاولة التحقق مما إذا كان نظام RDBMS الخاص بك يحدد بعض الامتدادات لتضمينه.


أعتقد أن ما تريد فعله هو منع حظر تطبيقك على الاستفسارات / المعاملات الطويلة الجارية. تحقيقا لهذه الغاية ، JDBC يدعم مفهوم مهلة الاستعلام. يمكنك ضبط مهلة الاستعلام باستخدام هذا:

java.sql.Statement.setQueryTimeout(seconds)

والتعامل مع SQLException بطريقة execute() خلال التراجع عن المعاملة (بالطبع ، من شأنه أن يعمل فقط إذا كان لديك autocommit لتعيين false ، ويدعم برنامج التشغيل JDBC Statement.cancel ()).


تحقق من Statement.cancel ().


كما ذكر بواسطة james ، سيقوم Statement.cancel() بإلغاء تنفيذ عبارة تشغيل (تحديد ، تحديث ، إلخ). وتقول مستندات JDBC على وجه التحديد أن Statement.cancel () آمن للتشغيل من موضوع آخر ، وحتى يقترح استخدام استدعاء في مؤشر ترابط وقت انتهاء.

بعد إلغاء البيان ، لا تزال متكتمًا بمهمة استعادة المعاملة. لم يتم توثيق ذلك على أنه آمن للتشغيل من موضوع آخر. يجب أن يحدث Connection.rollback() في مؤشر الترابط الرئيسي إجراء كافة المكالمات JDBC الأخرى. يمكنك معالجة ذلك بعد اكتمال استدعاء Statement.execute ... () الملغاة مع JDBCException (بسبب الإلغاء).





jdbc