Acceso a Bases de Datos [JDBC]

Esta p�gina muestra un procedimiento almacenado muy sencillo que no tiene par�metros. Aunque la mayor�a de los procedimientos almacenados hacen cosas m�s complejas que este ejemplo, sirve para ilustrar algunos puntos b�sicos sobre ellos. Como paso pr�vio, la sintaxis para definir un procedimiento almacenado es diferente de un controlador de base de datos a otro. Por ejemplo, algunos utilizan begin . . . end u otras palabras clave para indicar el principio y final de la definici�n de procedimiento. En algunos controladores, la siguiente sentencia SQL crea un procedimiento almacenado.

create procedure SHOW_SUPPLIERS
as
select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME
from SUPPLIERS, COFFEES
where SUPPLIERS.SUP_ID = COFFEES.SUP_ID
order by SUP_NAME

El siguiente c�digo pone la sentencia SQL dentro de un string y lo asigna a la variable createProcedure, que utilizaremos m�s adelante.

String createProcedure = "create procedure SHOW_SUPPLIERS " +
				"as " +
				"select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " +
				"from SUPPLIERS, COFFEES " +
				"where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +
				"order by SUP_NAME";

El siguiente fragmento de c�digo utiliza el objeto Connection, con para crear un objeto Statement, que es utilizado para enviar la sentencia SQL que crea el procedimiento almacenado en la base de datos.

Statement stmt = con.createStatement();
stmt.executeUpdate(createProcedure);

El procedimiento SHOW_SUPPLIERS ser� compilado y almacenado en la base de datos como un objeto de la propia base y puede ser llamado, como se llamar�a a cualquier otro m�todo.

.�Llamar a un Procedimiento Almacenado desde JDBC

JDBC permite llamar a un procedimiento almacenado en la base de datos desde una aplicaci�n escrita en Java. El primer paso es crear un objeto CallableStatement. Al igual que con los objetos Statement y PreparedStatement, esto se hace con una conexi�n abierta, Connection. Un objeto CallableStatement contiene una llamada a un procedimiento almacenado; no contiene el propio procedimiento. La primera l�nea del c�digo siguiente crea una llamada al procedimiento almacenado SHOW_SUPPLIERS utilizando la conexi�n con. La parte que est� encerrada entre corchetes es la sintaxis de escape para los precedimientos almacenados. Cuando un controlador encuentra "{call SHOW_SUPPLIERS}", traducir� esta sintaxis de escape al SQL nativo utilizado en la base de datos para llamar al procedimiento almacenado llamado SHOW_SUPPLIERS.

CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery();

La hoja de resultados de rs ser� similar a esto.

SUP_NAME			COF_NAME
----------------		-----------------------
Acme, Inc.			Colombian
Acme, Inc.			Colombian_Decaf
Superior Coffee			French_Roast
Superior Coffee			French_Roast_Decaf
The High Ground			Espresso

Observa que el m�todo utilizado para ejecutar cs es executeQuery porque cs llama a un procedimiento almacenado que contiene una petici�n y esto produce una hoja de resultados. Si el procedimiento hubiera contenido una sentencia de actualziaci�n o una sentencia DDL, se hubiera utilizado el m�todo executeUpdate. Sin embargo, en algunos casos, cuando el procedimiento almacenado contiene m�s de una sentencia SQL producir� m�s de una hoja de resultados, o cuando contiene m�s de una cuenta de actualizaci�nm o alguna combinaci�n de hojas de resultados y actualizaciones. en estos casos, donde existen m�ltiples resultados, se deber�a utilizar el m�todo execute para ejecutar CallableStatement.

La clase CallableStatement es una subclase de PreparedStatement, por eso un objeto CallableStatement puede tomar par�metros de entrada como lo har�a un objeto PreparedStatement. Adem�s, un objeto CallableStatement puede tomar par�metros de salida, o par�metros que son tanto de entrada como de salida. Los par�metros INOUT y el m�todo execute se utilizan raramente.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR