2012-05-13 9 views
5

संभव डुप्लिकेट:सर्वोत्तम अभ्यास को अंतिम रूप देने में कनेक्शन को बंद कर रहा है?

public void finalize() { 
    if (conn != null) { 
     try { 
      conn.close(); 
     } catch (SQLException e) { 
     } 
    } 
} 

मैं निम्नलिखित कोड के साथ कुछ जावा फ़ाइलों देखा था?

  • क्या Connection को बंद करने के लिए पर्याप्त है या क्या किसी को अन्य ऑब्जेक्ट्स को बंद करने की आवश्यकता है जैसे PreparedStatement?
  • +0

    प्रति [प्रभावी जावा] (http://www.informit.com/articles/article.aspx?p=1216151&seqNum=7) के रूप में - सबसे अच्छा अभ्यास 'finalizers से बचना है ' – tenorsax

    +0

    आप पा सकते हैं [मुझे पहले कौन सा बंद करना चाहिए, तैयार किए गए स्टेटमेंट या कनेक्शन?] (Http://stackoverflow.com/q/2363785/1048330) उपयोगी। – tenorsax

    उत्तर

    7

    जावा 7 से, एक संसाधन बंद करने के लिए सबसे अच्छा अभ्यास एक कोशिश के साथ-संसाधन का उपयोग करने के लिए है:

    इसके बजाय आप एक ब्लॉक करने के लिए संसाधनों की गुंजाइश है, इस तरह करना चाहिए

    5

    नहीं, यह "सर्वोत्तम अभ्यास" या यहां तक ​​कि "पास योग्य अभ्यास" नहीं है। आपके पास कोई गारंटी नहीं है कि सभी फाइनलाइजर्स कहलाए जाने पर, तो यह काम नहीं करेगा।

    http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html:

    try { 
        acquire resource 
    } 
    finally { 
        if (resource was acquired) 
        release it 
    } 
    
    1

    नहीं, अंतिम रूप देने वाले को समय-समय पर अंतिम रूप देने की संभावना नहीं है। अपने संसाधनों को स्पष्ट रूप से और निश्चित रूप से साफ करें।

    /* Acquire resource. */ 
    try { 
        /* Use resource. */ 
    } 
    finally { 
        /* Release resource. */ 
    } 
    
    -1

    एक बार कनेक्शन वस्तु प्राप्त किया जाता है, इसका इस्तेमाल, PreparedStatement/स्टेटमेंट/CallableStatement जो एक कोशिश ब्लॉक में रखा गया है निष्पादित करने के लिए तो बयान है, और Conn बंद करने की तरह घर-सफाई नौकरियों डाल दिया।

    जैसे:

    try{ 
    
        Connection conn = DriverManager.getConnection(url,username,password); 
    
        PreparedStatement pStat = conn.prepareStatement("Drop table info"); 
    
        pStat.executeUpdate(); 
         } 
         catch(Exception ex){ 
         } 
    
        finally(){ 
    
        pStat.close(); 
        conn.close(); 
    } 
    
    +1

    परिवर्तनीय स्कॉप्स यहां गलत हैं; यह संकलित नहीं होगा। इस उदाहरण में, दो कोशिश-अंत में ब्लॉक के लिए बुलाया जाता है, एक दूसरे में घोंसला। – erickson

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