public void guardar(Map<String,String> producto) throws SQLException { var nombre = producto.get("nombre"); var descripcion = producto.get("descripcion"); var cantidad = Integer.valueOf(producto.get("cantidad")); final var cantidadMaxima = 100;
ConnectionFactory factory = new ConnectionFactory();
final Connection con = factory.recuperaConexion();
try(con) {
con.setAutoCommit(false);
final PreparedStatement statement = con.prepareStatement(
"INSERT INTO producto "
+ "(nombre, descripcion, cantidad)"
+ " VALUES(?,?,?)",
Statement.RETURN_GENERATED_KEYS);
try(statement) {
do {
int cantidadParaGuardar = Math.min(cantidad, cantidadMaxima);
ejecutaRegistro(nombre, descripcion, cantidadParaGuardar, statement);
cantidad -= cantidadMaxima;
} while (cantidad > 0);
con.commit();
System.out.println("Commit exitoso");
}catch(Exception e) {
e.printStackTrace();
con.rollback();
System.out.println("Roll back de la transsaccion");
}
}
}
private void ejecutaRegistro(String nombre, String descripcion, Integer cantidad, PreparedStatement statement)
throws SQLException {
statement.setString(1, nombre);
statement.setString(2, descripcion);
statement.setInt(3, cantidad);
if (cantidad < 50) {
throw new RuntimeException("Ocurrió un error");
}
statement.execute();
final ResultSet resultSet = statement.getGeneratedKeys();
try(resultSet) {
while (resultSet.next()) {
System.out.println(String.format("Fue insertado el producto de ID: %d", resultSet.getInt(1)));
}
}
}