Diferencia entre revisiones de «Apache Derby»
(→Package en Derby) |
(→Package en Derby) |
||
Línea 105: | Línea 105: | ||
Para simular un package en Derby se tiene que crear un procedure que simule ser un package. Por ejemplo, si nosotros necesitamos invocar al procedure SIMULAR_PROCEDURE del package SIMULAR_PACKAGE debemos crear un procedure que se llame SIMULAR_PACKAGE.SIMULAR_PROCEDURE.<br> | Para simular un package en Derby se tiene que crear un procedure que simule ser un package. Por ejemplo, si nosotros necesitamos invocar al procedure SIMULAR_PROCEDURE del package SIMULAR_PACKAGE debemos crear un procedure que se llame SIMULAR_PACKAGE.SIMULAR_PROCEDURE.<br> | ||
− | <tsql sql="sql">CREATE procedure SIMULAR_PACKAGE.SIMULAR_PROCEDURE(INOUT CODIGO VARCHAR(15), <BR> OUT DESCRIPCION1(15),OUT DESCRIPCION2(15))</tsql> | + | <tsql sql="sql">CREATE procedure SIMULAR_PACKAGE.SIMULAR_PROCEDURE(INOUT CODIGO VARCHAR(15), <BR/> OUT DESCRIPCION1(15),OUT DESCRIPCION2(15))</tsql> |
== Ver también == | == Ver también == |
Revisión del 18:39 28 jun 2010
Apache_Derby es una Base De Datos relacional de Software Libre, implementada completamente en Java.
Contenido
Características
- Derby es muy liviano - cerca de 2 MB para el motor de la base y el driver JDBC embebido.
- Derby está basado en Java, JDBC y estándares SQL.
- Derby provee un driver JDBC que permite embeber a Derby en cualquier solución Java.
- Derby también soporta el modo cliente/servidor.
- Derby es facil de instalar, desplegar y usar.
Al ser una base de datos muy liviana es ideal para usarla en test unitarios.
Store Procedures en Derby
Derby una de las pocas bases de datos de este estilo que nos permite usar Store Procedures con mas de un parámetro de output. De esta manera, es posible utilizar Derby para simular el compartamiento de Store Procedures en bases más complejas.
Ejemplo
En Derby un Store Procedure es en realidad un objeto que llama a una clase java (externa a la base de datos).
Si por ejemplo tenemos que probar el llamado a un store procedure de Oracle, para realizar la Prueba Unitaria, crearemos en Java una clase que simule el comportamiento del store procedure en Oracle: ante determinados parametros de entrada, debera devolver parametros de salida válidos.
Los parametros de salida (OUT) y los parametros de entrada y salida (IN OUT) del procedure tienen que ser del tipo array en el metodo java.
El Store Procedure en Derby
package com.dosideas.derby; import java.sql.*; public class DerbyProcedures { public static void simuloComportamientoStore(int codigo, int[] codError, String[] desError) { if (codigo == 1) { codError[0]=-1; desError[0]="Error 1"; } if (codigo == 2) { codError[0]=-2; desError[0]="Error 2"; }; } }
La ejecución
package com.dosideas.derby; import java.sql.*; public class Prueba { public static void main(String[] args) { try { //Creamos la conexión a Derby Connection conn = DriverManager.getConnection("jdbc:derby:TestDB;create=true");
//Creamos el Store Procedure en Derby stmt = conn.createStatement(); stmt.execute("create procedure simuloComportamientoStore"+ "(IN codigo INTEGER, " + " OUT codError INTEGER, OUT desError VARCHAR(500)) " + " parameter style java language java external name " + " 'com.dosideas.derby.DerbyProcedures.simuloComportamientoStore'"); stmt.close();
//Invocamos al Store Procedure int codigo = 2; CallableStatement cstmt = conn.prepareCall("call simuloComportamientoStore(?,?,?)"); cstmt.setInt(1, codigo); cstmt.registerOutParameter(2, Types.INTEGER); cstmt.registerOutParameter(3, Types.VARCHAR); cstmt.execute(); int cod = cstmt.getInt(2); String des = cstmt.getString(3); cstmt.close(); conn.close(); //Mostramos el resultado System.out.println("Resultado --> " + String.valueOf(cod)+" "+des); //Eliminamos el Store Procedure Statement stmt = conn.createStatement(); stmt.execute("drop procedure simuloComportamientoStore"); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } }
Package en Derby
Para simular un package en Derby se tiene que crear un procedure que simule ser un package. Por ejemplo, si nosotros necesitamos invocar al procedure SIMULAR_PROCEDURE del package SIMULAR_PACKAGE debemos crear un procedure que se llame SIMULAR_PACKAGE.SIMULAR_PROCEDURE.
<tsql sql="sql">CREATE procedure SIMULAR_PACKAGE.SIMULAR_PROCEDURE(INOUT CODIGO VARCHAR(15),
OUT DESCRIPCION1(15),OUT DESCRIPCION2(15))</tsql>