martes oct 16, 2007
martes oct 16, 2007
Los
procedimientos almacenados son un herramienta que ha estado presente desde hace
ya un buen tiempo los principales motores de bases de datos para poder
encapsular lógica de aplicación y además SQL dentro del motor. Las ventajas de
poder ocupar los procedimientos almacenados dentro un sistema son variadas,
pero principalmente con el hecho de encapsular lógica dentro de ellas ayuda a
tener bajos niveles de acoplamiento, y altos niveles de cohesión considerando
los objetos que estamos haciendo persistentes dentro de nuestra aplicación.
Java DB, la versión soportada por SUN de Apache Derby, cuenta con varias funcionalidad des gran interés, tal como funcionar en modo “endebido” o cliente/servidor, soporte para tipos de datos BLOB and CLOB, entre otras... Pero es la capacidad de poder crear procedimientos almacenados lo que ahora nos ha interesado, sobre todo desde el punto de vista que los procedimientos almacenados que se crean en Java DB son hechos en Java. Esta capacidad de crear procedimientos almacenados en Java, que han ganado gran popularidad en grandes motores como Oracle, tiene varias ventajas comparativas con respecto a los procedimientos tradicionales:
Primeros pasos.
Si bien es cierto JavaDB viene por defecto con el JDK 1.6, para esta ocasión ocupare la versión de Java DB que se integra con Netbeans y el Enterprise Pack, donde vienen algunas bases de datos de ejemplo como “travel”.
Para
verificar si tenemos instalada la interfaz para el manejo de Java DB, debemos
ir al menú “Tools” y verificar que aparezca “Java DB Database”.

Ahora crearemos un nuevo proyecto
Java del tipo Java Application llamado “JavaStoredProcedure”. Ahora dentro de el crearemos una clase
llamada “ProcedureTest” donde pondremos el código para nuestro procedimiento
almacenado. En este caso el
procedimiento almacenado simplemente consulta algunos datos de la base de datos
“travel” según el parámetro que le estoy dando que corresponde a un ID de
persona. 
Ahora agregamos el siguiente código para la clase:
| public class ProcedureTest { /** Creates a new instance of ProcedureTest */ public ProcedureTest() { } public static void getNombre(int id, ResultSet[] rsOut) { try{ Connection conn = DriverManager.getConnection("jdbc:default:connection"); PreparedStatement ps1 = conn.prepareStatement("SELECT NAME FROM PERSON WHERE PERSONID=?"); ps1.setInt(1, id); rsOut[0] = ps1.executeQuery(); conn.close(); } catch(SQLException e){ System.err.println(e.toString()); } } } |
Ahora es muy importante para poder después ingresar este procedimiento dentro de la base de datos empaquetar la clase en un JAR. En el caso de Netbeans lo realiza de manera automática, verificándolo en las propiedades del proyecto.

Una vez construida y empaquetada la clase, debemos realizar las operaciones sobre la base de datos. Para eso vamos a iniciar la instancia de “travel” y abrir una nueva ventana para la ejecución de comandos.

Ahora para poder ingresar este procedimiento debemos crear primero el procedimiento dentro de la base de datos que “enmascarara” al procedimiento que está hecho en Java. De aquí cabe destacar que en este caso tenemos solo 1 “Dynamic Result Set”, ya que este va a depender de las preguntas que estemos realizando a la base de datos y la definición que hicimos en nuestro código Java donde dimos como parámetro 1 resultset de salida. Ademas el “External Name” corresponde al nombre de la clase y el método que generamos como procedimiento almacenado.
|
CREATE PROCEDURE GET_NOMBRE(IN id INTEGER) PARAMETER STYLE JAVA LANGUAGE JAVA READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME 'ProcedureTest.getNombre' |
Una vez ejecutado esto con éxito, debemos ocupar el comando SQLJ.INSTALL que se encarga de cargar el JAR que contiene nuestro procedimiento almacenado en la base datos. El primero parámetro que recibe corresponde a la dirección donde se encuentra el JAR a instalar(dar la ruta completa) y el segundo corresponde al contexto del procedimiento creado en la base de datos, es decir, “ESQUEMA.CLASE”.
|
CALL SQLJ.install_jar('C:\Documents and
Settings\Administrador\Mis |
| CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'travel.ProcedureTest'); |
Ahora a probar...
Estimado, realice los pasos que indicaste, pero desde "CALL SQLJ.install_jar('C:\Documents and Settings\Administrador\Mis
documentos\NetBeansProjects\JavaStoredProcedure\dist\JavaStoredProcedure.jar', 'travel.ProcedureTest', 0);"
tuve problemas, ya que no me funciono el comando call sql..., me podrias explicar con mas detalle como ejecutar ese paso??
Muchas Gracias
Enviado por Carlos en noviembre 30, 2007 a las 10:01 AM CLST #
esta weno pero mas claro... acuerdate que tenemos tarea de esto y x lo que veo el viernes veras masacre xk nadie cacha como hacerl sp ni triggers nisiquiera vistas
aunque sea una ayudita
Enviado por yo en diciembre 05, 2007 a las 01:21 PM CLST #
Bakn!! lo que estaba buscando gracias.. y sigue aportando!! nos ayudas mucho.
Enviado por Antonio en mayo 16, 2008 a las 02:14 PM CLT #
Hijo Puta
Enviado por Manu Tenorio en mayo 21, 2008 a las 04:11 AM CLT #
Hola, muchas gracias por tu articulo, esta muy padre. Solo tengo una duda, espero me puedas ayudar. No se, si me podrias dar unas ligas o articulos que hablen mas sobre SP con java, te lo agradesere mucho.
Enviado por Luis Angel en julio 28, 2008 a las 02:08 PM CLT #
Buenas, una consulta, una vez que creamos todo esto, como puedo probar el procedimiento?
Enviado por Michael Pérez en agosto 01, 2008 a las 10:52 AM CLT #
MAMAVERGA
Enviado por 192.188.49.5 en septiembre 30, 2008 a las 08:50 PM CLT #
puta cabron
Enviado por 216.184.123.107 en noviembre 13, 2008 a las 10:27 PM CLST #