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

Comentarios recientes