[SOLUCIONADO] Procedimiento almacenado y update desde java!!

Iniciado por jestat, Julio 28, 2015, 12:55:38 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 28, 2015, 12:55:38 AM Ultima modificación: Julio 29, 2015, 02:18:08 AM por Gabriela
Buenas tardes/dias/noches haha! vengo aqui con una pregunta, y bueno antes que nada gracias! de antemano por la ayuda! o consejos y pues acudo aqui porque llevo ya 2 dias con esto, leyendo y leyendo y no encuentro cual es la razo del porque no funciona..

La cosa esta asi:
tengo un procedimiento almacenado en MYSQL (si funciona el procedimiento, lo he corrido desde workbench el procedimiento y si me actualiza los datos) buueno, entonces intento con este procedimiento almacenado, desde java llamarlo para ejecutarlo solo que, pues no funciona.

en realidad es muy simple lo que hace el procedimiento almacenado, solamente actualiza algunas tablas, aqui les dejo el codigo (ojo, estoy 100 % seguro que el proicedimiento funciona pero solo por si lo quieren ver aqui esta )
Código: mysql

CREATE DEFINER=`root`@`localhost` PROCEDURE `paModificarProveedor`(in idProv int,in nomProv nvarchar(70), in agentContactoVar nvarchar(75), in descripcionVar nvarchar(1000), in telefonoVar nvarchar(25), in emailvar nvarchar(50), in RFCvar nvarchar(15), in numeroCalle nvarchar(6), in numCalleInterior nvarchar(6), in calleVar nvarchar(45), in coloniaVar nvarchar(45), in ciudadVar nvarchar(45), in estadoVar nvarchar(45), in paisVar nvarchar(45), in cp nvarchar(10))
BEGIN

update proveedores
set
nombre = nomProv,
        agentContacto = agentContactoVar,
        descripcion = descripcionVar,
        rfc = RFCvar
where idProveedor = idProv;

update proveedores_emails
set email = emailvar
where Proveedor_idProveedor = idProv;

                       
update proveedores_direcc
    set
numeroExt = numeroCalle,
        numeroInte = numCalleInterior,
        calle = calleVar,
        colonia = coloniaVar,
        ciudad = ciudadVar,
        estado = estadoVar,
        pais = paisVar,
        codigoPostal = cp
where idProveedor = idProv;
               
update proveedores_tel
    set telefono = telefonoVar
where Proveedor_idProveedor = idProv;   
END


y ahora, bueno solo para dato en general, ya utilize otros procedimientos almacenados (uno para insertar y otro para recuperar datos) y esos si me funcionan!! x.x es por eso que se me hace extra;o pero bueno.. continuando,
este procedimiento busco llamarlo desde una clase, llamada proveedor con un metodo de modificar, a la cual le paso los parametros a actualizar y ejecuta todo, a continuacion les pongo el metodo de dicha clase

Código: java

public int modificarProveedor(int idProv,String nombre,String agentCont,String descripcion,String telefono, String email, String rfc, String numCalleExt, String numCalleInt, String calle,String colonia,String ciudad,String estado,String pais,String codigoPostal ){
        int resul=1;
        /*                     
        1   in idProv int,
        2   in nomProv nvarchar(70),
        3   in agentContactoVar nvarchar(75),
        4   in descripcionVar nvarchar(1000),
        5   in telefonoVar nvarchar(25),
        6   in emailvar nvarchar(50),
        7   in RFCvar nvarchar(15),
        8   in numeroCalle nvarchar(6),
        9   in numCalleInterior nvarchar(6),
        10  in calleVar nvarchar(45),
        11  in coloniaVar nvarchar(45),
        12  in ciudadVar nvarchar(45),
        13  in estadoVar nvarchar(45),
        14  in paisVar nvarchar(45),
        15  in cp nvarchar(10)
        */
        Connection cone;
        cone = Conexion.GetConnection();
        System.out.println("Datos obtenidos");
        System.out.println(idProv + nombre + agentCont+ descripcion+telefono+email+rfc+numCalleExt+numCalleInt+ calle+colonia+ciudad+estado+ pais+codigoPostal );
        try {
                procAlm= cone.prepareCall("{call paModificarProveedor (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
               
                procAlm.setInt(1,idProv);
                procAlm.setString(2,nombre);
                procAlm.setString(3,agentCont);
                procAlm.setString(4,descripcion);
                procAlm.setString(5,telefono);
                procAlm.setString(6,email);
                procAlm.setString(7,rfc);                                                                                                                                                                                                                                                                                       
                procAlm.setString(8,numCalleExt );
                procAlm.setString(9,numCalleInt);
                procAlm.setString(10,calle);
                procAlm.setString(11,colonia);
                procAlm.setString(12,ciudad);
                procAlm.setString(13,estado);
                procAlm.setString(14,pais);
                procAlm.setString(15,codigoPostal);
                procAlm.execute();
                cone.close();
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Error al modificar el Proveedor " + ex.getMessage());
                resul = 0;
            }
        return resul;
    }

OJO e intentado tambiene l procAlm.executeUpdate() y tampoco me funciona u.u
y bueno, ya para finalizar, les muestro desde donde llamo a este metodo y creo la instancia del proveedor, es un evento de un boton, simplemente al dar click, el boton verifica que ciertos txtbox tengan caracteres, y si si tienen pues crea un objeto de la clase proveedor, le pasa los parametros requeridos y despues solo pone en no visible la ventana

Código: java

private void btn_guardarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        Connection cone;
        cone = Conexion.GetConnection();
        if(!this.txt_nomb.getText().isEmpty() && !this.txt_nombContacto.getText().isEmpty()){
            Proveedor prove = new Proveedor();
            prove.modificarProveedor(this.idProv,this.txt_nomb.getText(),this.txt_nombContacto.getText(),this.txt_descripcionProveedor.getText(),this.txt_tel.getText(),this.txt_email.getText(),this.txt_rfc.getText(),this.txt_numExt.getText(), this.txt_numInt.getText(),this.txt_calle.getText(),this.txt_colonia.getText(),this.txt_ciudad.getText(),this.txt_estado.getText(),this.txt_pais.getText(),this.txt_codigoPostal.getText());
            this.setVisible(false);
        }else{
            JOptionPane.showMessageDialog(null, "Ingrese los datos obligatorios ");
        }

    } 


cabe mencionar que todo se ejecuta sin errores (almenos no he podido atraparlos con el try catch, nose si este omitiendo algo) simplemente se ejecuta pero no modifica los valores. gracias de antemano! y saludos :D!

El hecho que no lance una Exception ya de por sí es raro. Si dices que has probado el procedure en el Workbench, el error se puede deber que estás pasando un id incorrecto al procedure.

Si hubiese algún tipo de excepción lo capturarías y como dices, no se lanza ninguna y teniendo en cuenta que tu procedure está testeada, solo se me ocurre que el error pudiese ser un id incorrecto.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
El hecho que no lance una Exception ya de por sí es raro. Si dices que has probado el procedure en el Workbench, el error se puede deber que estás pasando un id incorrecto al procedure.

Si hubiese algún tipo de excepción lo capturarías y como dices, no se lanza ninguna y teniendo en cuenta que tu procedure está testeada, solo se me ocurre que el error pudiese ser un id incorrecto.

GUS!! eres un genio! (y yo un completo despistado) haha por eso me encantan estos foros, te hacen ver lo que omites, haha y deecho si, el ID que le proporcionaba estaba equivocado, pero yo estaban tan concentrado en pensar que el fallo era algo que estaba parseando mal o que utilizaba de manera incorrecta(utilizaba un metodo inmediatamente anterior para recuperar los datos PERO no actualizaba el ID de la instancia,y por eso seguia en null) y aunque imprimia los datos en la funcion para verificar no me habia percatado de que el ID siempre era 0 haha pero muchisimas gracias por leer y saludos :D!:p