आपके दृष्टिकोण के साथ, यदि कोई अपवाद पहले . फेंका जाता है, तो कनेक्शन कभी भी बंद नहीं होगा conn.close()
कहा जाता है। आपको इसे (और कथन और परिणामसेट) एक try
. में प्राप्त करने की आवश्यकता है ब्लॉक करें और इसे finally
. में बंद करें खंड मैथा। finally
में कोई भी कोड होगा हमेशा अपवाद की परवाह किए बिना निष्पादित किया जाना चाहिए या नहीं। इससे आप सुनिश्चित कर सकते हैं कि महंगे संसाधन बंद हो जाएंगे।
यहाँ एक पुनर्लेखन है:
public int getSiteIdFromName(String name, String company) throws DataAccessException, java.sql.SQLException {
Connection conn = null;
Statement smt = null;
ResultSet rs = null;
int id = 0;
try {
conn = this.getSession().connection();
smt = conn.createStatement();
String query = "SELECT id FROM site WHERE name='" + name + "' and company_id='" + company + "'";
rs = smt.executeQuery(query);
rs.next();
id = rs.getInt("id");
} finally {
if (rs != null) try { rs.close(); } catch (SQLException logOrIgnore) {}
if (smt != null) try { smt.close(); } catch (SQLException logOrIgnore) {}
if (conn != null) try { conn.close(); } catch (SQLException logOrIgnore) {}
}
return id;
}
उस ने कहा, यह कोड SQL इंजेक्शन
के प्रति संवेदनशील है। हमले
. एक PreparedStatement
का प्रयोग करें Statement
. के बजाय ।
यह भी देखें :
- सन एक्सेप्शन ट्यूटोरियल:द फाइनली ब्लॉक
- सन JDBC ट्यूटोरियल:परिचय
- सन JDBC ट्यूटोरियल:रेडीस्टेडमेंट का उपयोग कैसे करेंए>
- DAO ट्यूटोरियल:बुनियादी JDBC कोड का सही तरीके से इस्तेमाल कैसे करें