Siguiendo es mi clase de ayuda para conseguir la conexión DB:La agrupación de conexiones JDBC utilizando C3P0
He usado la agrupación de conexiones C3P0 como se describe here.
public class DBConnection {
private static DataSource dataSource;
private static final String DRIVER_NAME;
private static final String URL;
private static final String UNAME;
private static final String PWD;
static {
final ResourceBundle config = ResourceBundle
.getBundle("props.database");
DRIVER_NAME = config.getString("driverName");
URL = config.getString("url");
UNAME = config.getString("uname");
PWD = config.getString("pwd");
dataSource = setupDataSource();
}
public static Connection getOracleConnection() throws SQLException {
return dataSource.getConnection();
}
private static DataSource setupDataSource() {
ComboPooledDataSource cpds = new ComboPooledDataSource();
try {
cpds.setDriverClass(DRIVER_NAME);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
cpds.setJdbcUrl(URL);
cpds.setUser(UNAME);
cpds.setPassword(PWD);
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);
return cpds;
}
}
en el DAO Voy a escribir algo como esto:
try {
conn = DBConnection.getOracleConnection();
....
} finally {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
logger
.logError("Exception occured while closing cursors!", e);
}
Ahora, mi pregunta es qué me molesto en hacer cualquier otra limpiar aparte de cerrar los cursores (conexión/declaración/resultSet/preparedStatement) listado en el bloque finally.
¿Qué es this cleanup ?? ¿Cuándo y dónde debería hacer esto?
En caso de encontrar algo incorrecto en el código anterior, por favor, señalan.
en JDK 7 no es necesario cerrar preparedStatement, implementa AutoClosable. [debido a esta publicación] (http://stackoverflow.com/questions/14862853/resource-leak-warning-in-eclipse) –