[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer] procedimiento almacenado

josephce
17 de Noviembre del 2005
Hola a todos soy nuevo, pero no se si me podria ayudar me sale este error cuando intento llamar un metodo de mi clase que este se conecta a una base de datos por medio de un Procedimiento alamacenado.

el codigo es este

public boolean BuscarIdProducto(String vidproducto){
boolean res=false;
try{
DBManager dbm = new DBManager();
Connection con = dbm.getConnection();
if ( con == null )
throw new NullPointerException( dbm.geterror() );
CallableStatement st = con.prepareCall("{CALL spProducto_T(?)}");
st.registerOutParameter(1,Types.CHAR);
st.setString(1,vidproducto);
ResultSet rs = st.executeQuery();
if ( rs.next() ){
this.idProducto = rs.getString("idproducto");
this.idClasifica = rs.getString("idclasifica");
this.nombre = rs.getString("nombre");
this.precio = rs.getDouble("precio");
this.um = rs.getString("um");
this.tipo = rs.getString("tipo");
res=true;
}
rs.close();
st.close();
dbm.closeConnection( con );
}catch(Exception e){e.getMessage();res=false;System.out.println(e.getMessage());}
return res;
}
el error :

[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]El parámetro formal '@idproducto' se definió con OUTPUT, pero el parámetro real no se ha declarado con OUTPUT.



Vanesa
17 de Noviembre del 2005
Según el API de CallableStatement si llamas a un procedimiento almacenado que devuelva un parámetro OUT se le deverá de llamar así:
{?= call spProducto_T(?)} /mira los interrogantes
El primer ? es de tipo OUT y se define como lo has hecho pero el segundo ? será de tipo IN, OUT o ambos, pero con el indice 2 en tu caso:
st.setString(2, vidproducto); /cuidao con los índices

El Api de CallableStatement:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/CallableStatement.html
Espero te sirva de ayuda,
Un saludo.


josephce
17 de Noviembre del 2005
Gracias por la ayuda vanesa, ya me funcionó