Наш стандартный кодовый раздел для использования 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: При использовании пула соединений нужно ли закрывать соединение в конце?Если так, разве цель объединения не потеряна?И если нет, то как DataSource узнает, когда конкретный экземпляр Connection освобожден и может быть повторно использован?Я немного запутался в этом вопросе, любые указатели оценены.
Вопрос 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);
}
Редактировать: Я думаю, что мы получаем пул соединения, так как мыне видеть трассировку стека.