EJB (Enterprise Java Beans) - Conexion JDBC hacia SQL Server 2005

 
Vista:

Conexion JDBC hacia SQL Server 2005

Publicado por andres Rincon (1 intervención) el 25/08/2009 06:55:26
Buena noche.

recurro a ustedes para que me puedan orientar como expertos, mi caso es que quiero llamar un procedimiento almacenado desde una clase en java, he tenido un gran avance ya que me puedo conectar a la base de datos desde NetBeans, el caso es que cuando ejecuto la prueba de mi clase, tengo un problema con las variables de retorno, ya que aunque reconoce el procedimiento y la conexion, cuando le digo que me tome el valor de retorno del parametro de salida, el programa me retorna el siguiente error:

com.microsoft.sqlserver.jdbc.SQLServerException: Se han devuelto insuficientes valores de salida desde el procedimiento almacenado:dbo.pr_nivel_acceso. Esperados:2. Recibidos:0.

el procedimiento recibe dos parametros de entrada y devuelde dos parametros de salida, y todos son del tipo VARCHAR(MAX).

Adjunto el codigo para que ustedes lo observen y quedaria totalmente agradecido si me pueden dar un diagnostico.

public class Conexion_DB {
private boolean error = false;
private static String JDBC_driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static String url_conexion = "jdbc:sqlserver://UMR8WG6UB0GZDQ4\CRMSISADM:1045;databaseName=DB_Sistema_de_Monitoreo";
private static String us = "jrincon";
private static String crt = "jrincon";
public Vector validar_usuario (String USER, String PASSWQ) throws SQLException{
//Parametros_conexion cl_conexion = new Parametros_conexion();
//Vector p_conexion = cl_conexion.Valores_parametros();
Vector Resultados = new Vector();
ResultSet v_respuesta = null;
Connection conexion = null;
try {
//Valida si existe conexion con la DB de SQLServer
Class.forName(JDBC_driver);
conexion = DriverManager.getConnection(url_conexion,us,crt);
/*conexion = DriverManager.getConnection((String)p_conexion.get(2),
(String)p_conexion.get(1),
(String)p_conexion.get(0)
);*/
if (conexion != null) {
System.out.println("Se ha establecido la conexion con la base de datos ");
System.out.println("Error = "+error);
}
}
catch (ClassNotFoundException noclase) {
Logger.getLogger(Conexion_DB.class.getName()).log(Level.SEVERE, null, noclase);
}
try {
//Llama la funcion y envia los parametros de envio y de respuesta
CallableStatement respuesta_fn_nivel_acceso = conexion.prepareCall("{call dbo.pr_nivel_acceso(?,?,?,?)}");
respuesta_fn_nivel_acceso.setString(1, USER);
respuesta_fn_nivel_acceso.setString(2, PASSWQ);
//Captura el valor devuelto por la funcion
//v_respuesta = respuesta_fn_nivel_acceso.executeQuery();
respuesta_fn_nivel_acceso.registerOutParameter(3, Types.VARCHAR);
respuesta_fn_nivel_acceso.registerOutParameter(4, Types.VARCHAR);
/*Resultados.addElement(v_respuesta.getString(3));
Resultados.addElement(v_respuesta.getString(4));*/
//cuando le digo getString para que me tome las variables de retorno presenta el error, pero al parecer si esta reconociendo el procedimiento
System.out.println(respuesta_fn_nivel_acceso.getString(3));
System.out.println(respuesta_fn_nivel_acceso.getString(4));

respuesta_fn_nivel_acceso.execute();
respuesta_fn_nivel_acceso.close();
}
catch (SQLException conexionsql){
error = true;
System.out.println("No se puede establecer la conexion el stored procedure de la base de datos");
System.out.println(error);
conexionsql.printStackTrace();
}
return Resultados;
}
gracias

Andres Rincon
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Conexion JDBC hacia SQL Server 2005

Publicado por Israel (2 intervenciones) el 11/01/2010 01:49:42
Tienes unos detalles de sintaxis... checa lo ke te envio por ahi te falto un ? para decirle ke el SP devolvera un valor, entonces primero registras los valores que devolvera, luego ya asignas los valores de ENtrada del SP

CallableStatement respuesta_fn_nivel_acceso = conexion.prepareCall("{? = call dbo.pr_nivel_acceso(?,?,?,?)}");

respuesta_fn_nivel_acceso.registerOutParameter(1, Types.VARCHAR);
respuesta_fn_nivel_acceso.registerOutParameter(2, Types.VARCHAR);

respuesta_fn_nivel_acceso.setString(3, USER);
respuesta_fn_nivel_acceso.setString(4, PASSWQ);

//Captura el valor devuelto por la funcion

--Te recominedo que utilises el .execute().

//v_respuesta = respuesta_fn_nivel_acceso.execute();

/*Resultados.addElement(v_respuesta.getString(3));
Resultados.addElement(v_respuesta.getString(4));*/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Conexion JDBC hacia SQL Server 2005

Publicado por Israel (2 intervenciones) el 11/01/2010 01:51:30
Tienes unos detalles de sintaxis... checa lo ke te envio por ahi te falto un ? para decirle ke el SP devolvera un valor, entonces primero registras los valores que devolvera, luego ya asignas los valores de ENtrada del SP

--Tu SP tiene 2 valores de entrada y 2 de salida, se registran independiente.

CallableStatement respuesta_fn_nivel_acceso = conexion.prepareCall("{? = call dbo.pr_nivel_acceso(?,?)}");

respuesta_fn_nivel_acceso.registerOutParameter(1, Types.VARCHAR);
respuesta_fn_nivel_acceso.registerOutParameter(2, Types.VARCHAR);

respuesta_fn_nivel_acceso.setString(3, USER);
respuesta_fn_nivel_acceso.setString(4, PASSWQ);

//Captura el valor devuelto por la funcion

--Te recominedo que utilises el .execute().

//v_respuesta = respuesta_fn_nivel_acceso.execute();

/*Resultados.addElement(v_respuesta.getString(3));
Resultados.addElement(v_respuesta.getString(4));*/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar