Contenido

Apache Derby, tu base de datos relacional

Contenido

Realizando los ejercicios de un curso que estoy haciendo, me he visto obligado a usar una base de datos desde Java.

Había oído hablar de “derby”, pero no tenía muy claro su uso ni ventajas. Aunque aún estoy en ello, creo que puedo ver claramente estas ventajas, así que voy a contar cómo usarla.

Java

Ventajas

Las grandes ventajas de Derby son:

  • Es una base de datos nativa en java
  • El núcleo y el driver ocupan menos de 3Mb
  • Aunque tiene modo cliente-servidor, se pude embeber en nuestra aplicación.
  • Es libre (licencia Apache).
  • Compatible con SQL estándar.

Y, contrariamente a todo lo que pueda parecer, no es una BBDD de juguete, sino todo lo contrario.

Derby para pruebas

Cuando estamos realizando pruebas, a menudo necesitamos una BBDD limpia. Derby tiene un modo “en memoria” que nos permite realizar las pruebas necesarias sin necesidad de tener una BBDD real.

Para comenzar, basta seleccionar el driver:

1
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

Ahora, obtenemos una conexión a una BBDD en memoria:

1
conn = DriverManager.getConnection("jdbc:derby:memory:derbyDB;create=true");

Y, finalmente, vamos a crearnos una tabla, que es la que vamos a probar:

1
2
Statement s = conn.createStatement();
s.execute("create table ejemplo(id int, codigo varchar(50)");

Si estamos usando junit 4, lo podemos hacer muy sencillo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class MyTester
{
  private Connection conn;

  @BeforeClass
  public void classSetUp()
  {
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
  }

  @Before
  public void setUp()
  {
    conn = DriverManager.getConnection("jdbc:derby:memory:derbyDB;create=true");
    Statement s = conn.createStatement();
    s.execute("create table ejemplo(id int, codigo varchar(50)");
    s.close();
  }

  @After
  public void tearDown()
  {
    conn.close();
  }
}

Y, con este pequeño esqueleto, comenzar a realizar las pruebas. Cada test tendrá una BBDD limpia en la que realizar sus consultas y/o modificaciones.

Es más lento que probar una función que no accede a BBDD, pero más rápido que crearte una BBDD nueva cada vez.

Derby en un entorno de producción

Para utilizar Derby con un archivo, basta cambiar la forma de obtener la conexión:

1
conn = DriverManager.getConnection("jdbc:derby:/ruta/archivo;create=true");

Y para usarlo en modo cliente servidor, también:

1
conn = DriverManager.getConnection("jdbc:derby://localhost:1527/MyDbTest;create=true");

Quiero usar esta maravilla

Los que me conocen saben que me he vuelto un Maven-adicto, así que la manera más simple de comenzar a usarlo es añadir lo siguiente a nuestro pom.xml:

1
2
3
4
5
<dependency>
  <groupId>org.apache.derby</groupId>
  <artifactId>derby</artifactId>
  <version>10.7.1.1</version>
</dependency>

Referencias