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:

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