3.3.06

Trabajando con HipersonicDB

Saludos.

Existen varias bases de datos libres implementadas en Java. Una de ellas, la que uso habitualmente, es HipersonicSQL DB (http://hsqldb.org/).

¿Por qué utilizar una base de datos pequeña escrita en Java cuando existen sistemas como MySQL, PostgreSQL o Firebird?. En mi caso, la respuesta es comodidad. Puedo distribuir junto con mis programas todo el servidor de bases de datos (sólo son 200-300 KB de más) evitando que los usuarios tengan que instalar ni configurar nada. En las primeras etapas de desarrollo es una opción muy interesante, ya que podemos tener nuestra base de datos funcionando de manera autónoma sin depender de la instalación y configuración de ningún servidor.
Además, HSQLDB es bastante completa soportando vistas, integridad referencial, transacciones, consultas batch, etc. (verificar esto).

HipersonicSQL tiene varios modos de funcionamiento. Los dos principales son local y servidor. En el primer modo, el servidor se inicia y termina a la misma vez que el programa. En el segundo, hemos de iniciar y terminar el servidor a mano (como en cualquier otro sistema). La principal diferencia entre ambos es su cadena de conexión, como se muestra a continuación

Modo servidor: jdbc:hsqldb:hsql://localhost/base_de_datos
Modo local: jdbc:hsqldb:ruta_a_la_base_de_datos

A continuación pongo el código de un sencillo ejemplo que se conecta a una base de datos en modo local, realiza una consulta y muestra el resultado. Lo único necesario para que este ejemplo funcione (además de la base de datos), es tener hsqldb.jar en el CLASSPATH.


import java.sql.*;
public class SQLStatement {
public static void main(String args[]) {
try {
Class.forName("org.hsqldb.jdbcDriver");

} catch(java.lang.ClassNotFoundException e) {
System.err.println(e.getMessage());
}
try {
Connection con = DriverManager.getConnection("jdbc:hsqldb:./testdb/testdb",
"sa", "");

String query = "select COF_NAME from COFFEES";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
System.out.println("Columns: "+numberOfColumns);
while (rs.next()) {
System.out.println("Fila " + rowCount + ": ");
for (int i = 1; i <= numberOfColumns; i++) {
System.out.print(" Columna " + i + ": ");
System.out.println(rs.getString(i));
}
System.out.println("");
}
stmt.execute("Shutdown");
stmt.close();
con.close();

} catch(SQLException ex) {
System.err.println(ex.getMessage());
}
}
}


No todos son ventajas trabajando con HSQLDB. Por ejemplo, las bases de datos de la versión 1.7 no son compatibles con la versión 1.8, lo cuál es malo. Sin embargo, tampoco he encontrado la necesidad de actualizar, por lo que he seguido trabajando con el 1.7 sin problemas.

No comments: