Hola, en el curso enseñaron el uso de try-resource me gusto mucho, hasta la sección 4 Scalabilidad con pool de conexiones, que el proyecto no me dejaba realizar un crud a través del entorno grafico, la app levanta con normalidad pero cuando quiero agregar, modificar, eliminar y actualizar me sale un error de conexión cerrada,
Así estaba el código con el try-resources
public class ProductoDAO {
final private Connection con;
public ProductoDAO(Connection con) {
this.con = con;
}
public int modificar(Producto producto) {
try (con) {
final PreparedStatement statement = cn.prepareStatement("UPDATE producto SET"
+ " nombre = ?"
+ ", descripcion = ?"
+ ", cantidad = ?"
+ " WHERE id = ?");
try (statement) {
statement.setString(1, producto.getNombre());
statement.setString(2, producto.getDescripcion());
statement.setInt(3, producto.getCantidad());
statement.setInt(4, producto.getId());
statement.execute();
int updateCount = statement.getUpdateCount();
return updateCount;
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
Exception in thread "AWT-EventQueue-0"
java.lang.RuntimeException:
java.sql.SQLException:
You can't operate on a closed Connection!!!
entonces me bajo el código de la sección final del curso y veo que ya no usa try-resource para la conexión que en este caso es la variable "con",
public class ProductoDAO {
private Connection con;
public ProductoDAO(Connection con) {
this.con = con;
}
public int modificar(Producto producto) {
try{
final PreparedStatement statement = cn.prepareStatement("UPDATE producto SET"
+ " nombre = ?"
+ ", descripcion = ?"
+ ", cantidad = ?"
+ " WHERE id = ?");
try (statement) {
statement.setString(1, producto.getNombre());
statement.setString(2, producto.getDescripcion());
statement.setInt(3, producto.getCantidad());
statement.setInt(4, producto.getId());
statement.execute();
int updateCount = statement.getUpdateCount();
return updateCount;
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
entonces retiro el try-resource solo para la conexión (variable "con") e intento el crud en la app, entonces funciona con normalidad, puedo agregar, eliminar, modificar y actualizar los datos en la db desde el formulario,
entonces mi pregunta es, ¿en que momento se cierra la conexión? el SQLException en el catch cierra la conexión solo si hay una excepción, pero si todo esta bien y se manipulan los datos, ¿cuando se cierra la conexión si ya no se esta usando el try-resource? bueno en este curso el proyecto en cuestión claro :/