Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/08/2010, 05:11
marioaguirre
 
Fecha de Ingreso: febrero-2009
Mensajes: 16
Antigüedad: 16 años
Puntos: 0
De acuerdo Ayuda Procedimiento Almacenado MySQL-Java

intento hacer solo lo siguiente... ([URL="http://www.youtube.com/watch?v=_847az-sPW4"]Video Youtube[/URL])

obtener la salida de un procedimiento o sea el OUT de un atributo

tengo mi procedimiento de esta forma, el cual funciona:
Código:
CREATE PROCEDURE ValidarPrgramas_IN(     
           IN _nombreArchivoPrograma         varchar(100),
           IN _nombrePrograma                varchar(100),       
           IN _categoriaPrograma             varchar(20),
           IN _versionPrgrama                decimal(10,4),
           IN _descripcionPrograma           text,
           OUT _textoValidacion              varchar(100)
     )
BEGIN
       #Validación si existe ArchivoPrograma y Version      
       if not exists (select * from Programas where _nombreArchivoPrograma = nombreArchivoPrograma and _versionPrgrama = versionPrgrama) then
       select CONCAT('Ya existe la version ',_versionPrgrama, ' del Archivo ', _nombreArchivoPrograma, ' en la Base de Datos')  into _textoValidacion;       
       else        
       #Insertar a la tabla Programas
       insert into Programas (nombreArchivoPrograma,nombrePrograma,categoriaPrograma,
       versionPrgrama,fechaIngresoPrograma,tiempoIngresoPrograma,descripcionPrograma)
       values (_nombreArchivoPrograma,_nombrePrograma,_categoriaPrograma,_versionPrgrama
       ,curdate(),curtime(),_descripcionPrograma);        
       select 'Insertado Correctamente' into _textoValidacion;
       end if; 

END;

y el método que me conecta es el siguiente:
Código:
private void insertandoDatos() {
            String $sql= "{call ValidarPrgramas_IN (?,?,?,?,?,?)}";
            Connection con = null;
            CallableStatement cs = null;
            String datoRecibido = "";
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/OrganizandoProgramas","root","Abc321");
                cs = (CallableStatement) con.prepareCall($sql);
                cs.setString(1,txt_ArchivoPrograma.getText());
                cs.setString(2,txt_NombrePrograma.getText());
                cs.setString(3,cmb_CategoriaPrograma.getSelectedItem().toString());
                cs.setDouble(4,Double.parseDouble(txt_VersionPrograma.getText()));
                cs.setString(5,txa_DescripcionPrograma.getText());
                cs.registerOutParameter(6,Types.VARCHAR);
                cs.execute();
                datoRecibido = cs.getString(6);
                //Si el datoRecibido es null
                if(cs.wasNull()){
                    JOptionPane.showMessageDialog(null,"Respusta Nula");
                }
                else{
                    JOptionPane.showMessageDialog(null,datoRecibido);
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,"Error en Procedimiento Almacenado.\n"+
                        e.getMessage()+"\n");
            }
        }
Todo bien hastaa esta linea...
Código:
cs.registerOutParameter(6,Types.VARCHAR);
Porque no consigo obtener el dato??? ya he realizado pruebas con menos atributos en el procedimiento y defirentes tipos de dato (varchar,text,integer)... y nada, siempre me arroja el mismo error: ([URL="http://www.flickr.com/photos/40124967@N06/4915330245/lightbox/"]imagenError[/URL])
Parameter index of * is out of range (1,0)

Les agradeceria la ayuda...