sqlserverdriver sqlserver sqljdbc4 microsoft for example java sql-server stored-procedures jdbc return-value

java - sqlserver - sqljdbc4-4.0.jar download



Obtener el valor de retorno de JDBC MSSQL (2)

La segunda respuesta revisada de Bozho estaba cerca pero no del todo allí. Sin embargo, me llevó a la respuesta.

Tomando el código del ejemplo que comencé, terminamos con:

CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }"); proc.registerOutParameter(1, Types.INTEGER); proc.execute(); int returnValue = proc.getInt(1);

Las piezas clave aquí son "? =" Delante de la "llamada" en la función prepareCall que establece un lugar para el valor de retorno y el prepareCall registerOutputParameter . Tiene que estar registrado como un Entero, ya que el valor de retorno siempre es un int (al menos en SQL Server, tal vez sea diferente en otros DB). Por lo tanto, debe obtenerlo usando getInt . Probé este método y funciona.

Me estoy conectando a SQL Server (2005) a través de Java utilizando el Microsoft SQL Server JDBC Driver 2.0.

¿Cómo obtengo el valor de retorno de un procedimiento almacenado? Estoy haciendo algo como:

Connection connection = dataSource.getConnection() CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }"); proc.execute();

¿Debería estar usando execute ()? ejecutar la solicitud()? executeUpdate ()? Ninguno de estos parece devolver un valor de retorno por defecto, pero no estoy seguro de cómo llegar a él.

EDIT 1: Para ser claro, sé cómo llamar a los procedimientos almacenados. Esta pregunta es específicamente sobre cómo obtener el VALOR DEVUELTO (a diferencia de un Conjunto de resultados). El valor de retorno es un número entero que generalmente se genera al ejecutar una consulta sin conjunto de resultados o si específicamente declaras algo como RETURN 0 en tu SQL.

EDIT 2: executeUpdate () devuelve un int pero este int no es lo mismo que el valor de retorno. Además, un parámetro OUT no es lo mismo que un valor de retorno.


c.prepareCall("? = .."); cs.execute(); String returnedValue = cs.getString(1);

(o el método del tipo apropiado. Puede usar getObject alternativamente)

De un antiguo tutorial de inicio

los métodos getXXX en CallableStatement recuperan valores de los parámetros OUT y / o el valor de retorno de un procedimiento almacenado.

(Por cierto, los enlaces que fueron provistos por Umesh tenían este tipo de información).