2008-11-17 6 views
26

क्या समय-समय पर लेनदेन को रद्द करने का कोई तरीका है? कहें, मैंने डेटाबेस में एक कमांड भेजा है जो पांच मिनट चलता है और चार के बाद, मैं इसे रद्द करना चाहता हूं।मैं एक चल रहे जेडीबीसी लेनदेन को कैसे रोक सकता हूं?

क्या जेडीबीसी डीबी को सिग्नल "जो भी आप कर रहे हैं उसे रोकें" भेजने के लिए एक तरीका परिभाषित करता है?

उत्तर

28

जेम्स द्वारा वर्णित अनुसार, Statement.cancel() एक चल रहे वक्तव्य (चयन, अद्यतन, आदि) के निष्पादन को रद्द कर देगा। जेडीबीसी दस्तावेज़ विशेष रूप से कहते हैं कि STATEment.cancel() किसी अन्य थ्रेड से चलाने के लिए सुरक्षित है और इसे टाइमआउट थ्रेड में कॉल करने के उपयोग को भी सुझाव देता है।

कथन रद्द करने के बाद, आप अभी भी लेनदेन को वापस लाने के काम से फंस गए हैं। यह किसी अन्य धागे से चलाने के लिए सुरक्षित होने के रूप में प्रलेखित नहीं है। Connection.rollback() मुख्य थ्रेड में अन्य सभी जेडीबीसी कॉल करने के साथ होना चाहिए। रद्द किए गए वक्तव्य के बाद आप इसे संभाल सकते हैं। EXecute ...() कॉल जेडीबीसीएक्सप्शन (रद्द करने के कारण) के साथ पूर्ण हो जाता है।

+1

'स्टेटमेंट.cancel() 'को कॉल करने पर ऑरैक-विशिष्ट व्यवहार है: http://stackoverflow.com/a/659063/603516 – Vadzim

-5

नहीं, आप यह मानक JDBC का उपयोग कर गर्भपात नहीं कर सकते।

आप यह जांचने का प्रयास कर सकते हैं कि आपके विशेष आरडीबीएमएस कुछ विस्तार को परिभाषित करने के लिए परिभाषित करते हैं या नहीं।

+4

मेरे पास विक्रेताओं ने मुझे यह बताया है। यदि कोई विशेष जेडीबीसी ड्राइवर स्टेटमेंट.cancel() को लागू नहीं करता है, तो यह एक गुणवत्ता-कार्यान्वयन समस्या है। यह उस उपयोग के मामले में है और दस्तावेज है। –

12

मैं अनुमान लगा रहा हूँ कि आप क्या करना चाहते हैं कि आपके आवेदन लंबे चल प्रश्नों के लिए/लेनदेन पर अवरुद्ध होने से रोकने है। इस अंत में, जेडीबीसी एक प्रश्न समय की अवधारणा का समर्थन करता है। आप इस का उपयोग कर क्वेरी समाप्ति सेट कर सकते हैं:

java.sql.Statement.setQueryTimeout(seconds) 

और SQLException निश्चित रूप से लेन-देन वापस रोलिंग (द्वारा execute() विधि द्वारा फेंका संभाल, कि केवल, आप गलत पर सेट autocommit है अगर काम करेगा और अपने JDBC- ड्राइवर स्टेटमेंट.cancel()) का समर्थन करता है।

+0

मुझे लगता है कि यह एक बेहतर और सरल दृष्टिकोण है, क्योंकि यह चलने के लिए "खुद को साफ" करने की अनुमति देता है, इसके विपरीत बाहरी धागा होता है (जिसमें हमेशा मुद्दों का एक नया सेट शामिल होता है)। – Faustas

संबंधित मुद्दे