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