Foros del Web » Programación para mayores de 30 ;) » Java »

como ejecutar mas de 1 query mysql en java

Estas en el tema de como ejecutar mas de 1 query mysql en java en el foro de Java en Foros del Web. Buenas comapañerps quisiera saber como podria hacwer en java para ejecutar más de 1 query a la vez. Tengo entendido que para poder realizar esto ...
  #1 (permalink)  
Antiguo 03/12/2015, 20:33
 
Fecha de Ingreso: febrero-2015
Ubicación: D.F.
Mensajes: 52
Antigüedad: 9 años, 2 meses
Puntos: 0
Información como ejecutar mas de 1 query mysql en java

Buenas comapañerps quisiera saber como podria hacwer en java para ejecutar más de 1 query a la vez. Tengo entendido que para poder realizar esto seria mejor el crear un procedimineto almacenado en lugar de colocarlo directamente en el código java.

Lo que quiero hacer es guardar en una tabla un ahorro el cual contiene un monto determinado, para despues sumarselo y actualizar la caja (alcancia) a la cual este ahorro esta relacionado.

Se me ha ocurrido el crear esto en 3 funciones diferentes (una para el insert into, el otro para el update y el ultimo que utilize los 2 anteriores para hacerlo).

Así me gustaria hacerlo ya que tambien quiero que, si hay un determinado error me lo muestre en un joption pane y los ejemplos que estos siguiendo los encontre en el siguiente sitio web.

Entonces no se si esto se pueda hacer en un procedimiento almacenado y que, ademas en caso de fallar me muestre dichos errores. ¿Podrian orientarme por favor?
__________________
Mientras unos tienen el poder del dinero, otros tienen la luz del conocimiento y algunos más tienen la perseverancia del ingenio.
  #2 (permalink)  
Antiguo 04/12/2015, 01:33
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: como ejecutar mas de 1 query mysql en java

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
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 07/12/2015, 12:36
 
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.

Etiquetas: java-mysql, linux, mysql+consulta, mysql+db, netbeans, programación-general
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:20.