Diferencia entre revisiones de «Apache Derby»

De Dos Ideas.
Saltar a: navegación, buscar
(Características)
Línea 8: Línea 8:
 
* Derby es facil de instalar, desplegar y usar.
 
* Derby es facil de instalar, desplegar y usar.
  
Al ser una base de datos muy liviana es ideal para usarla en test unitarios. Es una de las pocas bases de datos de este estilo que nos permite [[Testear Store Procedures con mas de un parámetro de output]].
+
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 testear Store Procedures con mas de un parámetro de output.
 +
 
 +
=== 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.
 +
 
 +
==== El Store Procedure en Derby ===
 +
<code java>
 +
package prueba;
 +
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";
 +
            };
 +
      }
 +
}
 +
</code>
 +
 
 +
==== La ejecución ====
 +
<code java>
 +
 +
package prueba;
 +
import java.sql.*;
 +
public class Prueba {
 +
 +
      public static void main(String[] args) {
 +
          try {       
 +
            System.out.println("Creo in memory database");
 +
            Connection conn  = DriverManager.getConnection("jdbc:derby:TestDB;create=true");
 +
       
 +
            System.out.println("Creo store procedure");
 +
            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 " +
 +
                        " 'prueba.DerbyProcedures.simuloComportamientoStore'");
 +
            stmt.close();
 +
         
 +
            System.out.println("Llamo 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();
 +
 +
            System.out.println("Muestro resultado");
 +
            System.out.println("Resultado --> " + String.valueOf(cod)+" "+des);
 +
 +
            System.out.println("drop store procedure");
 +
            Statement stmt = conn.createStatement();
 +
            stmt.execute("drop procedure simuloComportamientoStore");
 +
            stmt.close();
 +
          }
 +
          catch (SQLException e) {
 +
              while (e != null) {
 +
                  System.out.println(e.toString());
 +
                  e.printStackTrace();
 +
                  e = e.getNextException();
 +
                }
 +
          }
 +
      }
 +
}
 +
</code>
  
 
==Ver también==
 
==Ver también==
 
* [http://db.apache.org/derby/ Página oficial de Apache Derby]
 
* [http://db.apache.org/derby/ Página oficial de Apache Derby]
 
* [http://db.apache.org/derby/quick_start.html Guía de inicio rápido]
 
* [http://db.apache.org/derby/quick_start.html Guía de inicio rápido]

Revisión del 13:06 17 ene 2009

Apache Derby es una Base De Datos relacional de Software Libre, implementada completamente en Java.

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 testear Store Procedures con mas de un parámetro de output.

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.

= El Store Procedure en Derby

package prueba;
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 prueba;
import java.sql.*;
public class Prueba {

     public static void main(String[] args) {
         try {         
           System.out.println("Creo in memory database");
           Connection conn  = DriverManager.getConnection("jdbc:derby:TestDB;create=true");
        
           System.out.println("Creo store procedure");
           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 " +
                        " 'prueba.DerbyProcedures.simuloComportamientoStore'");
           stmt.close();
         
           System.out.println("Llamo 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();

           System.out.println("Muestro resultado");
           System.out.println("Resultado --> " + String.valueOf(cod)+" "+des);

           System.out.println("drop store procedure");
           Statement stmt = conn.createStatement();
           stmt.execute("drop procedure simuloComportamientoStore");
           stmt.close();
         } 
         catch (SQLException e) {
             while (e != null) {
                 System.out.println(e.toString());
                 e.printStackTrace();
                 e = e.getNextException();
               }
         }
     }
}

Ver también