मैं कर रहा हूँ कोड की समीक्षा हमारे पालतू परियोजनाओं में से एक के (ज्यादातर FindBugs जैसे उपकरणों का प्रयोग करके) और FindBugs गलत (स्यूडोकोड) के रूप में निम्न कोड में चिह्नित:परिणाम बंद होने पर परिणाम बंद नहीं है?
Connection conn = dataSource.getConnection();
try{
PreparedStatement stmt = conn.prepareStatement();
//initialize the statement
stmt.execute();
ResultSet rs = stmt.getResultSet();
//get data
}finally{
conn.close();
}
त्रुटि थी कि इस कोड संसाधन नहीं जारी हो सकता है । मैं पता लगा कि ResultSet और वक्तव्य बंद नहीं किया गया, तो मैं अंत में में उन्हें बंद कर दिया:
finally{
try{
rs.close()
}catch(SqlException se){
//log it
}
try{
stmt.close();
}catch(SqlException se){
//log it
}
conn.close();
}
लेकिन मैं कई परियोजनाओं में ऊपर पैटर्न (काफी कुछ कंपनियों से) का सामना करना पड़ा, और कोई भी resultsets बंद करने या था बयान।
क्या कनेक्शन के बंद होने पर परिणामस्वरूप बंद होने वाले परिणाम और विवरणों के साथ आपको परेशानी हो रही थी?
मुझे केवल this मिला और यह कनेक्शन को बंद करते समय ओरेकल को परिणाम परिणाम बंद करने में समस्याएं होती है (हम ओरेकल डीबी का उपयोग करते हैं, इसलिए मेरे सुधार)। java.sql.api Connection.close() javadoc में कुछ भी नहीं कहता है।
मैं अत्यधिक अपाचे कॉमन्स-dbutils उपयोग करने की अनुशंसा (http://commons.apache.org/dbutils/) यह एक हल्के JDBC पुस्तकालय है कि वास्तव में बॉयलरप्लेट JDBC कोड का एक बहुत कुछ को साफ है। –
यह उन त्रुटियों की तरह है जब वे प्रासंगिक वस्तुओं को बंद नहीं करते हैं - "ओआरए -01000: अधिकतम खुले कर्सर पार हो गए" - http: // stackoverflow।कॉम/प्रश्न/121925 9 2/जावा-एसक्यूएल-स्क्लेक्सप्शन-ओरा -01000-अधिकतम-खुले कर्सर- –
डेटाबेस कर्सर से अधिक - http://stackoverflow.com/questions/3861558/what-are-the-benefits-of-using -डेटाबेस-कर्सर एक कर्सर एक ऐसा टूल है जो आपको सेट में रिकॉर्ड्स को फिर से चलाने की अनुमति देता है। इसमें आदेश और वर्तमान रिकॉर्ड की अवधारणाएं हैं। –