
22/08/2010, 05:11
|
| | Fecha de Ingreso: febrero-2009
Mensajes: 16
Antigüedad: 16 años Puntos: 0 | |
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... |