Bagian kode standar kami untuk menggunakan JDBC adalah ...
Connection conn = getConnection(...);
Statement stmt = conn.conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rset = stmt.executeQuery (sqlQuery);
// do stuff with rset
rset.close(); stmt.close(); conn.close();
Pertanyaan 1: Saat menggunakan Connection Pool, haruskah seseorang menutup Connection di bagian akhir? Jika ya, bukankah tujuan pengumpulan hilang? Dan jika tidak, bagaimana DataSource mengetahui kapan instance tertentu dari Connection dibebaskan dan dapat digunakan kembali? Saya sedikit bingung tentang yang satu ini, ada petunjuk yang dihargai.
Pertanyaan 2: Apakah metode berikut mendekati standar? Sepertinya upaya untuk mendapatkan koneksi dari kumpulan, dan jika DataSource tidak dapat dibuat, gunakan DriverManager model lama. Kami bahkan tidak yakin bagian mana yang dieksekusi saat runtime. Mengulangi pertanyaan di atas, haruskah seseorang menutup Koneksi yang keluar dari metode seperti itu?
Terima kasih, - MS.
synchronized public Connection getConnection (boolean pooledConnection)
throws SQLException {
if (pooledConnection) {
if (ds == null) {
try {
Context envCtx = (Context)
new InitialContext().lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/NamedInTomcat");
return ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
}}
return (ds == null) ? getConnection (false) : ds.getConnection();
}
return DriverManager.getConnection(
"jdbc:mysql://"+ipaddy+":"+dbPort +"/" + dbName, uName, pWord);
}
Sunting: Saya pikir kita mendapatkan koneksi gabungan karena kita tidak melihat jejak tumpukan.