Наш стандартний розділ коду для використання 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 Pool, чи слід закривати з'єднання в кінці? Якщо так, то чи не втрачена мета об’єднання? А якщо ні, то як DataSource знає, коли певний екземпляр Connection звільняється і може бути використаний повторно? Я трохи розгублений у цьому, будь-які вказівки оцінили.
Питання 2: Чи наведений нижче метод чимось близький до стандартного? Схоже, спроба отримати з'єднання з пулу, і якщо DataSource неможливо встановити, використовуйте старомодний 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);
}
Редагувати: Я думаю, що ми отримуємо об'єднане з'єднання, оскільки ми не бачимо сліду стека.