Nasza standardowa sekcja kodu do korzystania z JDBC to ...
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();
Pytanie 1: Czy w przypadku korzystania z puli połączeń należy zamknąć połączenie na końcu? Jeśli tak, to czy nie utracono celu łączenia? A jeśli nie, w jaki sposób źródło danych wie, kiedy określone wystąpienie połączenia jest zwolnione i może zostać ponownie użyte? Jestem trochę zdezorientowany w tej sprawie, doceniam wszelkie wskazówki.
Pytanie 2: Czy poniższa metoda jest zbliżona do standardowej? Wygląda na to, że próbowano uzyskać połączenie z puli, a jeśli nie można ustanowić DataSource, użyj staroświeckiego DriverManager. Nie jesteśmy nawet pewni, która część jest wykonywana w czasie wykonywania. Powtarzając powyższe pytanie, czy należy zamknąć Połączenie wychodzące z takiej metody?
Dziękuję, - 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);
}
Edycja: myślę, że otrzymujemy połączenie w puli, ponieważ nie widzimy śladu stosu.