HSQLDB: Instalación y uso

Objetivos

Contar con una base de datos de prueba para nuestras aplicaciones.
Es fácil de instalar y proporciona las utilidades básicas. Está basada en ficheros.
Esta base de datos permite varios modos de ejecución, entre los que destaco:

  • Modo standalone: La base de datos se ejecuta incrustada en el proceso que hará uso de ella de manera que no dependamos de nada más que de nuestra aplicación
  • Modo servidor: La base de datos se ejecuta como un servidor separada de nuestra aplicación pero estando así disponible para cualquier proceso y desde cualquier equipo de la red.

Requisitos antes de empezar

hsqldb.jar [http://www. hsqldb.org/]

Arranque de la base de datos

Si queremos utilizar HSQL en modo servidor:

Creamos un directorio que servirá como almacén de los datos: data
Arrancamos el servidor con la orden java desde el directorio de datos:

C:\data>java -classpath [rutaHsqldb]\hsqldb.jar org.hsqldb.Server
Si queremos utilizar HSQL en modo standalone

En este caso el arranque de la base de datos se hace desde la propia aplicación que utilizará la base de datos.

Administración gráfica

La propia librería proporciona una utilidad gráfica

>java -classpath [rutaHsqldb]\hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

Al ejecutar el comando aparece un panel de conexión, donde podemos seleccionar los parámetros de conexión. La siguiente figura nos conecta a una base de datos HSQL arrancada en modo servidor en nuestra máquina:

HSQLDB Pantallazo de administración gráfica

Conexión desde Java

Base de datos arrancada en modo standalone

try {
    Class.forName("org.hsqldb.jdbcDriver" );
} catch (Exception e) {
    System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
    e.printStackTrace();
    return;
}

Connection c =
    DriverManager.getConnection("jdbc:hsqldb:file:data/pruebahsql", "sa", "");
Base de datos arrancada en modo servidor

try {
    Class.forName("org.hsqldb.jdbcDriver" );
} catch (Exception e) {
    System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
    e.printStackTrace();
    return;
}

Connection c =
    DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/alias", "sa", "");

NOTAS

  • Debe haberse arrancado previamente la base de datos con
    #java -classpath [rutaHsqldb]\hsqldb.jar org.hsqldb.Server
  • Si no se ha definido alias, no es necesario ponerlo

NOTA
En algunas ocasiones hay que escribir la línea siguiente para obtener la conexión:

Class.forName("org.hsqldb.jdbcDriver").newInstance();

Ejemplo completo

En este ejemplo se muestra el uso de una base de datos incluida en el propio proceso de nuestra aplicación.
Se muestra cómo se arranca la base de datos (y se crea si no existe), se crea una tabla, se añaden registros y finalmente se recuperan.


package es.arcoe;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Conector {

    private static Connection dbcon;
    public static Connection getConexion(){

        if (dbcon==null){
            try {
                Class.forName("org.hsqldb.jdbcDriver" );
                dbcon =
                 DriverManager.getConnection("jdbc:hsqldb:file:data/pruebahsql",
                                              "sa", "");
            }catch (Exception e) {
                System.out.println("ERROR: Fallo al conectar con HSQLDB JDBC driver.");
                e.printStackTrace();
            }
        }
        return dbcon;
    }

    public static void endConexion(){
        if (dbcon!=null){
            try {
                dbcon.close();
            }catch (Exception e) {
                System.out.println("ERROR: Fallo al cerrar HSQLDB.");
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        //creo un statement de la conexión
        try{
            Statement stmt = Conector.getConexion().createStatement();
            //Borramos la tabla de prueba que utilizaremos
            try{stmt.executeQuery("DROP TABLE PRUEBAHSQL");}
            catch(java.sql.SQLException e){}

            //Creamos una tabla PRUEBAHSQL CON COLUMNAS ID, NOMBRE, APELLIDO, EDAD
            stmt.executeQuery("CREATE TABLE PRUEBAHSQL (ID BIGINT PRIMARY KEY, "+
                               "EDAD INTEGER,NOMBRE VARCHAR(255),APELLIDO "+
                               "VARCHAR(255))");

            //Insertamos dos registros
            stmt.executeQuery("INSERT INTO PRUEBAHSQL (ID,EDAD,NOMBRE,APELLIDO) "+
                               "VALUES (1,22,'Manuel', 'Manuélez')");
            stmt.executeQuery("INSERT INTO PRUEBAHSQL (ID,EDAD,NOMBRE,APELLIDO) "+
                           "VALUES (2,24,'José'  , 'Joselez')");

            // Realizamos una modificación de un registro
            stmt.executeUpdate("UPDATE PRUEBAHSQL SET APELLIDO='Josélez' WHERE ID=2");

            //Obtenemos los registros de la BBDD para mostrarlos por consola
            ResultSet resultado = stmt.executeQuery("select * from PRUEBAHSQL");
            while (resultado.next()){
                System.out.println(resultado.getString("NOMBRE") +
                               " " +resultado.getString("APELLIDO")+ ": "+
                               resultado.getInt("EDAD") + " años" );

            }
            resultado.close();//liberamos resultados

            stmt.close();//liberamos recursos

            Conector.endConexion();//cerramos conexión

        }catch(Exception e){
            System.out.println("ERROR: Fallo al recoger datos de la bbdd.");
            e.printStackTrace();
        }

    }

}

NOTA
Es necesario tener en el classpath la librería hsqldb.jar

Leave a Reply

You must be logged in to post a comment.