/** * Control de transacción en el procedimiento almacenado * * @param prod */ @Override public void create2(Producto prod) { Connection cn = null; try { cn = AccesoDB.getConnection(); cn.setAutoCommit(true); String query = "{call usp_crea_producto(?,?,?,?,?)}"; CallableStatement cstm = cn.prepareCall(query); cstm.registerOutParameter(1, Types.INTEGER); cstm.setInt(2, prod.getIdcat()); cstm.setString(3, prod.getNombre()); cstm.setDouble(4, prod.getPrecio()); cstm.setInt(5, prod.getStock()); cstm.executeUpdate(); prod.setIdprod(cstm.getInt(1)); cstm.close(); } catch (SQLException e) { throw new RuntimeException(e.getMessage()); } catch (Exception e) { throw new RuntimeException("No se puede crear el producto."); } finally { try { cn.close(); } catch (Exception e) { } } }
/** * Control de transacción desde el cliente * * @param prod */ @Override public void create1(Producto prod) { Connection cn = null; try { // Variables Statement stm; PreparedStatement pstm; String query; int id; ResultSet rs; // Conexión cn = AccesoDB.getConnection(); // Iniciar la Tx cn.setAutoCommit(false); // Obtener el Id del producto query = "select sq_producto.NextVal id from dual"; stm = cn.createStatement(); rs = stm.executeQuery(query); rs.next(); id = rs.getInt("id"); // Insertar el producto query = "insert into producto" + "(idprod,idcat,nombre,precio,stock) " + "values(?,?,?,?,?) "; pstm = cn.prepareStatement(query); pstm.setInt(1, id); pstm.setInt(2, prod.getIdcat()); pstm.setString(3, prod.getNombre()); pstm.setDouble(4, prod.getPrecio()); pstm.setInt(5, prod.getStock()); pstm.executeUpdate(); // Retornar el id prod.setIdprod(id); // Confirmar Tx cn.commit(); // Cerrar objetos rs.close(); stm.close(); pstm.close(); } catch (SQLException e) { try { cn.rollback(); } catch (Exception e1) { } throw new RuntimeException(e.getMessage()); } catch (Exception e) { try { cn.rollback(); } catch (Exception e1) { } throw new RuntimeException("Error en el proceso crear producto."); } finally { try { cn.close(); } catch (Exception e) { } } }
@Override public void update(Producto prod) { Connection cn = null; try { // Variables PreparedStatement pstm; String query; int filas; // Conexión cn = AccesoDB.getConnection(); // Iniciar la Tx cn.setAutoCommit(false); // Insertar el producto query = "update producto set idcat=?, nombre=?, precio=?, " + "stock=? where idprod = ? "; pstm = cn.prepareStatement(query); pstm.setInt(1, prod.getIdcat()); pstm.setString(2, prod.getNombre()); pstm.setDouble(3, prod.getPrecio()); pstm.setInt(4, prod.getStock()); pstm.setInt(5, prod.getIdprod()); filas = pstm.executeUpdate(); if (filas == 0) { throw new SQLException("Producto no existe."); } // Confirmar Tx cn.commit(); // Cerrar objetos pstm.close(); } catch (SQLException e) { try { cn.rollback(); } catch (Exception e1) { } throw new RuntimeException(e.getMessage()); } catch (Exception e) { try { cn.rollback(); } catch (Exception e1) { } throw new RuntimeException("Error en el proceso crear producto."); } finally { try { cn.close(); } catch (Exception e) { } } }