2012-05-09 14 views
5

जावाडोक कहते PreparedStatement की .close() का कहना है के लिए है कि यह ..तैयार किए गए स्टेशन और कनेक्शन के लिए "करीबी" के बीच संबंध?

विज्ञप्ति इस वक्तव्य वस्तु के डेटाबेस और JDBC संसाधनों तुरंत बजाय जब यह स्वचालित रूप से बंद कर दिया है ऐसा करने के लिए के लिए इंतज़ार कर। डेटाबेस संसाधनों को टालने से बचने के लिए जैसे ही आप उनके साथ समाप्त हो जाते हैं, संसाधनों को रिलीज़ करना आम तौर पर अच्छा अभ्यास है।

पहले से बंद किए गए स्टेटमेंट ऑब्जेक्ट पर बंद विधि को कॉल करना कोई प्रभाव नहीं पड़ता है।

नोट: जब कोई स्टेटमेंट ऑब्जेक्ट बंद होता है, तो उसका वर्तमान परिणामसेट ऑब्जेक्ट, यदि कोई मौजूद है, तो भी बंद हो जाता है।

इस परिदृश्य पर

MyConnector databaseConnector = DBManager.instance().getConnector(); 

    Connection con = databaseConnector.getConnection(); // returns java.sql.Connection 
    PreparedStatement pstmt = null; 

    try { 
     pstmt = con.prepareStatement("some query"); 
     ... 
    } finally { 
     if (pstmt != null) 
      pstmt.close(); 
    } 

पर विचार करें इस उदाहरण में, pstmt.close() भी पास con?

+0

नहीं। कोई बयान बंद करने से * कनेक्शन बंद नहीं होगा (क्योंकि एक कनेक्शन के लिए * कई * कथन हो सकते हैं)। कनेक्शन * भी * एक प्रबंधित संसाधन माना जाना चाहिए। –

+2

आप "con.isClosed()" http://docs.oracle.com/javase/6/docs/api/java/sql/Connection.html –

उत्तर

9

StatementConnection बंद करें। हालांकि, Connectionबंद कर देगाStatement बंद करें। इतना है कि यह की

सोचें:

  • कनेक्शन -> बनाता है और स्वचालित रूप से बंद -> वक्तव्य
  • वक्तव्य -> ​​बनाता है और स्वचालित रूप से बंद -> ResultSet

तो एक Connection बंद करने होगा स्वचालित रूप से Statement s और किसी भी ResultSet एस को स्वचालित रूप से बंद करें।

हालांकि, यह अभी सबसे अच्छा अभ्यास माना जाता है सभी तीन मैन्युअल रूप से (ResultSetStatement के बाद Connection के बाद) यदि संभव हो तो बंद हुआ।

2

टिप्पणी: वक्तव्य वस्तु बंद है, इसकी वर्तमान ResultSet [नहीं बल्कि कनेक्शन] वस्तु, यदि कोई है, यह भी बंद कर दिया है।

यह निकट कनेक्शन नहीं होगा, यह केवल परिणाम वस्तु को बंद कर देता है।

0

आप जावा 7 और try-with-resources उपयोग कर रहे हैं आप कनेक्शन या Statement या ResultSet के किसी भी बंद करने के बारे में चिंता करने की जरूरत नहीं है।

try (Connection conn = databaseConnector.getConnection(); 
    PreparedStatement pstmt = conn.prepareStatement("some query")) { 
    ... 
} catch (Exception e) { 
    ... 
} 
+0

अच्छा बिंदु के साथ हमेशा इस यूएसएफ का परीक्षण कर सकते हैं।दुर्भाग्य से मैं अभी भी 1.6 पर हूं (अभी के लिए) – JAM