HSQLDBenNetBeans

[[{TableOfContentsTitle=TablaDeContenidos} | {TableOfContents title='Tabla de contenidos'}]]

HSQLDB en NetBeans

Es la continuación del proyecto HypersonicSQL desde 2001. Permite varias sentencias SQL - ANSI92.

Descargaremos la biblioteca JDBC, que a su vez también es el RDBMS, de aquí:

http://downloads.sourceforge.net/hsqldb/hsqldb_1_8_0_10.zip http://hsqldb.org

La versión utilizada en este post es la 1.8.0.10

Solo pesa 3.6 MB

Al descomprimirlo encontraremos varias carpetas. La carpeta lib contiene el driver hsqldb.jar y este .jar es el más importante para todo el HSQLDB, ya que es el JDBC y a su vez el motor de la base de datos.

Modos de uso

HSQLDB tiene los siguientes modos de uso:

HSQLDB Server

Es un modo cliente-servidor. Es decir, de la manera común que siempre hemos visto como operan los RBDMS como Oracle, MySQL, Firebird, PostgreSQL, etc. Esto es: se ejecuta la aplicación desde cualquier host quedando en espera (servidor), y desde cualquier otro host puede acceder como cliente al servidor.

Hagamos un ejemplo: Desde una ventana de la consola del Sistema Operativo, vayamos a la carpeta que se descomprimió el contenido del archivo .zip. En mi caso es d:\proys\lib\hsqldb. (Nota: el directorio hsqldb debe contener el directorio lib para poder realizar lo siguiente) Una vez allí ejecutamos lo siguiente:

java -cp lib/hsqldb.jar org.hsqldb.Server -database.0 file:data/demo_db -dbname.0 xdb

Al ejecutar esto, la ventana de consola muestra lo siguiente:

Image:cmd-hsqldb_HSQLDBenNetBeans.jpg

Pero nuestra clase org.hsqldb.Server tiene cuatro argumentos importantes. Estos argumentos son realmente dos importantes:

  • -database.0 file:data/demo_db Este parámetro indica cual es la base de datos que se va a crear físicamente. Como pueden crearse varias bases de datos, debemos diferenciar cada una usando un número después del parámetro -database.. Es decir, en este caso, nuestra base de datos tiene el número 0 (-database.0). Luego con el parámetro file: se especifíca dónde se va a ubicar físicamente el archivo de la base de datos. En este caso se creará el archivo demo_db dentro de la carpeta data. Puede ser una ruta relativa o absoluta de disco. (file:data/demo_db)
  • -dbname.0 xdb Indica el nombre de la base de datos. También se tiene que especificar el número de la base de datos que debe coincidir con el argumento -database. En este ejemplo, el nombre de la base de datos es xdb. Esto es que para acceder desde Java debemos indicar el nombre xdb y no el archivo físico.

Esto quiere decir que si deseamos tener otra base de datos adicional llamada clientes, debemos escribir todo esto:

java -cp lib/hsqldb.jar org.hsqldb.Server -database.0 file:data/demo_db -dbname.0 xdb  -database.1 file:data/clientes_d

Ahora bien, ¿cómo se accede desde java? Bien, usaremos el NetBeans, en el panel de "Prestaciones" (Ctrl+5). En el nodo "Controladores" hagamos clic derecho y seleccionamos "Nuevo controlador..."

Image:hsqldb-2_HSQLDBenNetBeans.jpg

Con esto se abrirá una ventana de diálogo "Nuevo Driver JDBC". Hacemos clic en el botón "Agregar..." y buscamos el archivo hsqldb.jar (Sí, el mismo que usamos para ejecutar nuestro servidor... como dije antes: ese mismo archivo es el motor y el driver)

Una vez seleccionado, el NetBeans encontrará la clase controladora de la base de datos:

Image:hsqldb-3_HSQLDBenNetBeans.jpg

Clic en "Aceptar". Y se agregará un nuevo elemento bajo el nodo "Controladores" llamado "HSQLDB". Hacemos clic derecho sobre este nodo creado y seleccionamos "Conectar usando..." para crear una conexión usando este controlador. Se presentará la ventana de diálogo "nueva coneixón de base de datos...". Escribimos lo siguiente:

  • nombre de usuario: sa
  • password: (nada)
  • JDBC URL: jdbc:hsqldb:hsql://localhost/xdb

Image:hsqldb-4_HSQLDBenNetBeans.jpg

Note que el nombre de la base de datos es xbd tal como lo especificamos cuando ejecutamos el servidor. Clic en Aceptar, y al mostrarse el esquema que debemos seleccionar, dejamos la opción predeterminada "INFORMATION_SCHEMA". Se creará un nuevo nodo de conexión, y al abrirlo podemos ver su contenido. Claro, en este momento no hay ninguna tabla creada.

Image:hsqldb-5_HSQLDBenNetBeans.jpg

Pero como podemos ver, es como cualquier otra conexión a base de datos. Desde el IDE podemos crear tablas, usando sentencias SQL.

Image:hsqldb-7_HSQLDBenNetBeans.jpg

Es posible que las tablas creadas no se visualicen en el IDE de NetBeans. Pero sí podemos ejecutar sentencias SQL DDL o DML con total normalidad:

Ahora, podemos visualizar la carpeta hsqldb/data.Vemos que se ha creado al menos dos archivos por cada base de datos. Todas nuestras sentencias DDL (create, drop, alter, etc) y DML (select, insert, update, etc) se registrarán en el archivo de extensión .script. Es decir, que podemos modificar estos archivos manualmente para crear nuestras tablas y los datos que contendrán. Para poder modificar este archivo, debemos detener la base de datos.

También podemos acceder a las tablas de la base de datos utilizando una herramienta propia del hsqldb. Regresemos nuevamente a nuestra consola y ejecutemos lo siguiente (el servidor deberá aún estar en ejecución, asi que es necesario abrir una nueva ventana de consola)

java -cp lib/hsqldb.jar org.hsqldb.util.DatabaseManager

En la ventana de diálogo "Connect" que aparece escribimos el mismo URL que escribimos párrafos arriba, el mismo usuario y nada en la contraseña. El driver y el tipo son opcionales.

Image:hsqldb-8_HSQLDBenNetBeans.jpg

Clic en OK y listo.

Image:hsqldb-9_HSQLDBenNetBeans.jpg

Este manejador de base de datos es muy interesante, simple y efectivo. No detallaré esta herramienta ya que no es el motivo de este post.

Así pues, ya tenemos el servidor, y sabemos como conectarnos con él.

¿y cómo puede conectarse desde un programa java? Pues ya se puede imaginar:

Class.forName("org.hsqldb.jdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "sa", "");

Hsqldb Web Server

Este modo es muy interesante.Todos sabemos que por seguridad de redes los firewall evitan el uso de puertos adicionales a los permitidos. Los puertos por omisión del HSQLDB Server es el 9001 y el 544. Pero HSQLDB nos da la posibilidad de usar el puerto 80 como si fuera un servidor web.

Se ejecuta de la misma manera que el modo Server, pero se usa la clase WebServer. Es decir, debe ejecutarse de la siguiente manera:

java -cp lib/hsqldb.jar org.hsqldb.WebServer -database.0 file:data/demo_db -dbname.0 xdb

Ahora el URL del JDBC es: jdbc:hsqldb:httpd://localhost/xdb

Y todo funcionará igual.


Hsqldb Servlet

Es el modo servlet, es decir, debe estar ejecutado en una aplicación web y crear un servlet desde web.xml

    <servlet>
        <servlet-name>hsqldb-servlet</servlet-name>
        <servlet-class>org.hsqldb.Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hsqldb-servlet</servlet-name>
        <url-pattern>/hsqldb/*</url-pattern>
    </servlet-mapping>

No detallaré este modo ya que es mejor usar el modo servidor y no crear una aplicación web para crear un servidor.

Modo aislado (stand-alone)

Este modo es uno de los más útiles cuando se hace aplicaciones portables. Además, este modo permite tener una aplicación con la base de datos incrustada a ella sin necesidad de instalar alguna biblioteca adicional.

No requiere un servidor, simplemente al crear una conexión JDBC, ya se creó la base de datos.

Es decir, en nuestra aplicación usaremos el mismo driver org.hsqldb.jdbcDriver y el url que usaremos será jdbc:hsqldb:file:d:/hsqldb/clientes.

Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:d:/proys/lib/hsqldb/data/demo_db", "sa", "");


La misma base de datos que hemos usado en el modo servidor, web server, es también usado en el modo stand-alone, y usando el mismo driver! Solo difiere el url.


Nota:

solo se debe usar un modo a la vez, o es server, web server o stand-alone. Ya que necesita de bloqueos de archivo a nivel de sistema operativo.


Modo memoria

Es un modo muy interesante para ser usado en aplicaciones demo, que no se necesita guardar la información en un archivo físico. Si no que se crea la base de datos en memoria mientras dura la conexión. Naturalmente se tendrían que crear las tablas inmediatamente después de establecer la conexión.

Solo se debe cambiar el URL a: jdbc:hsqldb:mem:clientes.

y todo sigue igual

Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo