Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/12/2015, 12:36
misforosvictor08
 
Fecha de Ingreso: febrero-2015
Ubicación: D.F.
Mensajes: 52
Antigüedad: 9 años, 2 meses
Puntos: 0
Sonrisa Respuesta: como ejecutar mas de 1 query mysql en java

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

No tienes porque crear un procedimiento almacenado (y escribir logica aplicativa en la base de datos). Te bastaria con ejecutar las distintas consultas en una transaccion. De esta forma si se falla en alguno punto se hace rollback y los cambios realizados se deshacen. Si todo va bien se hace un commit para persistir los cambios.
https://docs.oracle.com/javase/tutor...nsactions.html

El tutorial que sigues parece correcto. Puedes reutilizarlo casi todo.

La logica quedaria en pseudocodigo Java como:


Código Java:
Ver original
  1. Connection con = getConnection();
  2. con.setAutoCommit(false);
  3. try {
  4.     performQuery1(con);
  5.     performQuery2(con);
  6.     performQuery3(con);
  7.     con.commit();
  8.     jOptionPane -> "Proceso correcto";
  9. } catch (Exception e) {
  10.     con.rollback();
  11.     jOptionPane -> "Ha ocurrido un error";
  12. }

Un saludo
Muchísimas gracias por tu ayuda, la información que me proporcionaste me fue muy útil. Después de investigar un poquito más en el siguiente enlace para poder adecuar el UPDATE y en este otro enlace para entender un poco más acerca de las transacciones, mi función en código java quedo así:

Código:
public void tableHacerUnAhorro(String idDeposito, LocalDate fecha, double monto, String idCaja){
        
        //obtenemos la conexión a la base de datos
        Connection conexionEstablecida=conexionMysql();
        PreparedStatement altaAhorro=null;
        PreparedStatement actualizarCaja=null;
        
        try {
            
            //se deshabilita el modo de confirmación automática
            conexionEstablecida.setAutoCommit(false); 
            
            //se preparan las sentencias mysql a ejecutar
            altaAhorro=conexionEstablecida.prepareStatement("INSERT INTO deposito VALUES(?,?,?,?);");            
            actualizarCaja=conexionEstablecida.prepareStatement("UPDATE caja SET saldo_total=saldo_total+? WHERE id_caja=?");
            
            altaAhorro.setString(1,idDeposito);
            //para poder almacenarlo en la bd se tiene que convertir de LocalDate a Date
            altaAhorro.setDate(2,Date.valueOf(fecha));
            altaAhorro.setDouble(3, monto);
            altaAhorro.setString(4, idCaja);
            altaAhorro.executeUpdate();
            
            actualizarCaja.setDouble(1,monto);
            actualizarCaja.setString(2, idCaja);
            actualizarCaja.executeUpdate();
            
            //se indica que se deben aplicar los cambios en la base de datos
            conexionEstablecida.commit();
            
            conexionEstablecida.close();
            
            JOptionPane.showMessageDialog(null, "Datos almacenados de forma exitosa");
                        
        } 
        catch(SQLException ex) {
            try{
                //deshace todos los cambios realizados en los datos
                conexionEstablecida.rollback();
            }
            catch (SQLException ex1) {
                //solo para proposito de testeo
                //permite mostrar los errores de forma más detallada en el IDE
                Logger.getLogger(TableDeposito.class.getName()).log(Level.SEVERE, null, ex1);
            }
            //solo para proposito de testeo
            //permite mostrar los errores de forma más detallada en el IDE
            //Logger.getLogger(TableCaja.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se ingreso el ahorro\n"+ex.getMessage(),"Error al ingresar el Ahorro",JOptionPane.ERROR_MESSAGE);
        }
    
        
    }
Aun me faltan acomodar y corregir otras cosillas de mi programa pero con esto ya pude resolver esta parte.

Aparte en este otro enlace encontré como sumarle el monto a un campo double en el UPDATE si tener que obtener previamente dicho valor para poder usarlo.
__________________
Mientras unos tienen el poder del dinero, otros tienen la luz del conocimiento y algunos más tienen la perseverancia del ingenio.