2008-11-08 13 views
6

में खुले कनेक्शन के लिए प्रोग्रामेटिक रूप से जांच कर रहा है I ओरेकल डेटाबेस के लिए jdbc में एक खुले कनेक्शन की जांच कैसे करूं?जेडीबीसी

नोट: conn.isClosed() इसका उपयोग नहीं किया जा सकता है।

+0

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

+0

मैं कनेक्शन पूल को कार्यान्वित करना चाहता हूं। –

+0

इसे जांचें [जावा जेडीबीसी कनेक्शन स्थिति] (http://stackoverflow.com/a/30888132/782535) –

उत्तर

2

आमतौर पर एक कनेक्शन पूल कनेक्शन कनेक्शन (इस)() विधि का उपयोग करेगा ताकि यह जांच सके कि कनेक्शन अभी भी मान्य है या नहीं। समस्या यह है कि सभी जेडीबीसी ड्राइवर इस कॉल को सही तरीके से संभाल नहीं पाएंगे। तो मुझे लगता है कि कुछ सरल चेक स्टेटमेंट्स हैं जैसे कि RealHowTo ने कहा। ओरेकल के लिए उन्होंने पहले से ही "दोहरी से चुनें" का उल्लेख किया है जो हमेशा ओरेकल डेटाबेस के लिए सफल होना चाहिए। मुझे लगता है कि विभिन्न डेटाबेस के लिए समान प्रश्न हैं। मुझे याद है कि पिछली परियोजना में हमने एक स्वयं कनेक्शन पूल भी लागू किया था, जिसने इस तरह के सत्यापन प्रश्नों का उपयोग किया था।

8

कुछ की तरह:

Statement stmt = null; 
ResultSet rs =null; 
try { 
    stmt = conn.createStatement(); 
    // oracle 
    rs = stmt.executeQuery("SELECT 1 FROM Dual"); 
    // others 
    // rs = stmt.executeQuery("SELECT 1"); 
    if (rs.next()) 
     return true; // connection is valid 
} 
catch (SQLException e) { 
    // TODO : log the exception ... 
    return false; 
} 
finally { 
    if (stmt != null) stmt.close(); 
    if (rs != null) rs.close(); 
} 

ध्यान दें कि तब पूल अगर एक कनेक्शन वैध है या नहीं की जाँच करने के लिए एक तंत्र हो सकता है अगर कनेक्शन एक कनेक्शन पूल (उदाहरण के लिए एक अनुप्रयोग सर्वर में) से आ रही है। बीईए के साथ, आप "परीक्षण-ऑन-रिजर्व" संपत्ति में चयन निर्दिष्ट करते हैं।

यदि आप अपना पूल विकसित कर रहे हैं तो आप यह देखना चाहेंगे कि अन्य लोग इसे कैसे कर रहे हैं (उदा। Proxool)।

+0

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

+0

मुझे दृढ़ता से संदेह है कि कनेक्शन बंद होने पर executeQuery एक SQLException फेंक देगा। –

1

this पोस्टिंग देखें।

संदर्भित समाधान यहां पोस्ट किए गए एक के समान हैं (डीयूएएल के सत्यापन के लिए त्वरित क्वेरी) लेकिन ओरेकल जेडीबीसी कनेक्शन वर्ग में मालिकाना पिंग विधि का उपयोग करके ओबकल के लिए जेबॉस द्वारा प्रदान किया गया एक दिलचस्प समाधान भी है। कोड here देखें।

// निकोलस

+0

ध्यान दें कि टाइप IV ड्राइवर में सभी पिंगडेटाबेस (int) दोहरी से "चयन करें" x है; " – leonigmig

1

उपयोग pingDatabase(int timeout) के बाद से 9.0.1

+0

ध्यान दें कि टाइप IV ड्राइवर में सभी पिंगडेटाबेस (int) दोहरी से "चयन करें" x है; " – leonigmig

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