我们使用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:在使用连接池时,我们是否应该在最后关闭连接?如果是这样,那么连接池的目的不就失去了吗?如果不关闭,数据源如何知道什么时候可以重用特定的连接实例?我对此有些困惑,希望能得到一些指导。
问题2:下面的方法是否接近于标准?看起来像是尝试从连接池中获取连接,如果无法建立数据源,则使用老式的DriverManager。我们甚至不确定哪一部分会在运行时执行。重复上面的问题,我们是否应该关闭从这样的方法得到的连接?
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);
}
编辑:我认为我们得到的是池化连接,因为我们没有看到堆栈跟踪。