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の特定のインスタンスが解放され、再利用できるようになると、DataSourceはどのようにして知るのでしょうか。私はこれについて少し混乱しています、どんなポインタでも感謝します。
質問2:次の方法は標準に近いものですか?プールから接続を取得する試みのように見え、DataSourceを確立できない場合は、古い形式のDriverManagerを使用します。実行時にどの部分が実行されるのかさえわかりません。上記の質問を繰り返しますが、そのようなメソッドから出てくる接続を閉じる必要がありますか?
ありがとう、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);
}
編集:スタックトレースが表示されないため、プールされた接続を取得していると思います。