Llamar Stored procedure con parámetros de salida desde java

En alguna ocasión tendremos que obtener información de un store procedure, en este caso de SQL Server, que devuelva resultados en una o más variables de salida en vez o además del Resultset.

Comencemos el ejemplo:

Primero necesitamos un Stored procedure que nos regrese un resultset además de un valor en una variable, para no complicarnos usaremos este muy simple en la BD tempdb

USE [tempdb]
GO
 
/****** Object:  StoredProcedure [dbo].[testSP]    Script Date: 05/09/2011 17:36:31 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE PROCEDURE [dbo].[testSP]
	@texto VARCHAR OUTPUT AS
BEGIN
 
	SET NOCOUNT ON;
 
   SELECT 'pepe','pecas','pica','papas','con','un','pico'
 
   SET @texto='Esto es una prueba'
END
 
GO

Ya que tenemos el Stored procedure lo probamos ejecutándolo en SQLServer

USE [tempdb]
GO
 
DECLARE	@return_value INT,
		@texto VARCHAR(60)
 
EXEC	@return_value = [dbo].[testSP]
		@texto = @texto OUTPUT
 
SELECT	@texto AS N'@texto'
 
SELECT	'Return Value' = @return_value
 
GO

Ahora si, desde JAVA lo llamamos de esta forma:

//Tu código para conexión a BD
//......
try {
 
con=DriverManager.getConnection(url,login,password);
 
//Aquí va el llamado al SP, en este caso solo un parámetro
String query="EXEC [dbo].[testSP] ? OUTPUT";
CallableStatement cs;
cs = con.prepareCall(query);//Preparamos el CallableStatement
//En esta linea registramos a nuestro parámetro de
//salida con cs.registerOutParameter(1,Types.VARCHAR);
cs.registerOutParameter(1,Types.VARCHAR);
ResultSet rs=cs.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1));
 
}
//En esta linea llamamos a nuestro parámetro de
//salida con cs.getString(1)
System.out.println("resultado"+ cs.getString(1));
//Simpre debe ser después de procesar el resultset
} catch(SQLException se) {
 
//El resto de tu código

Y de esta forma podemos obtener por ejemplo el resultado de una
búsqueda en un ResultSet y la cantidad de resultados en un entero

Deje un comentario


NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">