ส่วนรหัสมาตรฐานของเราสำหรับการใช้ JDBC คือ ...
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();
คำถาม 1: เมื่อใช้ Connection Pool ควรปิด Connection เมื่อสิ้นสุดหรือไม่? ถ้าเป็นเช่นนั้นจุดประสงค์ของการรวมกลุ่มจะไม่สูญหายไปหรือ? และถ้าไม่แหล่งข้อมูลจะรู้ได้อย่างไรว่าเมื่อใดที่อินสแตนซ์ของการเชื่อมต่อว่างขึ้นและสามารถนำกลับมาใช้ใหม่ได้ ฉันสับสนเล็กน้อยเกี่ยวกับเรื่องนี้คำแนะนำใด ๆ ที่ชื่นชม
คำถามที่ 2: วิธีการต่อไปนี้ใกล้เคียงกับมาตรฐานหรือไม่? ดูเหมือนจะพยายามรับการเชื่อมต่อจากพูลและหากไม่สามารถสร้างแหล่งข้อมูลได้ให้ใช้ DriverManager แบบเก่า เราไม่แน่ใจด้วยซ้ำว่าส่วนใดถูกเรียกใช้ในรันไทม์ ถามคำถามข้างบนซ้ำเราควรปิด Connection ที่มาจากวิธีดังกล่าวหรือไม่?
ขอบคุณ - มส.
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);
}
แก้ไข: ฉันคิดว่าเราได้รับการเชื่อมต่อแบบรวมเนื่องจากเราไม่เห็นการติดตามสแต็ก