O HSQLDB ou também conhecido como HyperSQL Database é um SGBD (Sistema de Gerenciamento de Banco de Dados) relacional escrito totalmente em linguagem Java. O HSQLDB é open source, bastante simples de utilizar, possui poucos recursos, mas é bastante eficiente e ocupa pouco espaço em disco podendo assim ser embutido em qualquer aplicação Java sem a necessidade de qualquer instalação. Entre as suas aplicações ele é largamente utilizado no OpenOffice. O HSQLDB é indicado para ser utilizado em aplicações desktop que não compartilham servidores de banco de dados, pode ser utilizado para demonstrações, testes unitários ou em qualquer situação onde pode ser utilizado um banco de dados simples e pequeno, como por exemplo, em uma aplicação que tem poucos dados cadastrados e que essa base de dados provavelmente não crescerá muito ao longo do tempo.

Nas próximas seções veremos como podemos instalar o HSQLDB, como podemos utilizar o seu editor gráfico para criar o banco de dados, se conectar e executar comandos SQL que permitem modificar o banco de dados, inserir registros, deletar registro, etc. Também veremos como podemos integrar o Hibernate com o HSQLDB.

Instalação

Para instalar o HSQLDB basta visitarmos o site http://sourceforge.net/projects/hsqldb/files/ e baixar a última versão do HSQLDB. Após isso, basta descompactar o arquivo em alguma pasta do computador.

Para executar a ferramenta de acesso a base de dados para criação de um banco de dados, tabelas, etc, basta executar os comandos abaixo:

Primeiramente devemos ir até o diretório raiz onde o hsqldb foi descompactado. Para isso devemos executar o comando abaixo no prompt de comando:

cd "C:\bibliotecas\hsqldb-2.3.2\hsqldb"

Após isso basta executarmos o comando abaixo para abrir a ferramenta gráfica HSQL Database Manager para que assim possamos manipular o banco de dados:

C:\bibliotecas\hsqldb-2.3.2\hsqldb>java -cp ./lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

Caso o Java não esteja no classpath podemos chamar diretamente o java apontando para o diretório onde ele está instalado. Portanto, o comando abaixo poderia ser executado ao invés do comando acima:

C:\bibliotecas\hsqldb-2.3.2\hsqldb>"C:\Program Files (x86)\Java\jre6\bin\java.exe" -cp ./lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

Segue na Figura 1 a ferramenta gráfica HSQL Database Manager.

Figura 1. Imagem da ferramenta gráfica para gerenciar o Banco de Dados.

Criando um Banco de Dados

Para criar um Banco de Dados no HSQLDB é muito simples. Após a ferramenta aberta basta digitarmos um nome para o banco de dados em “Setting Name”, escolher o tipo do banco de dados em “Type”, e o caminho do banco de dados no sistema de arquivo na URL após “jdbc:hsqldb:file:”, isso para o caso de escolhermos o tipo HSQL Database Engine Standalone. Por exemplo, se o arquivo ficar no caminho “C:/Banco” a nossa URL deveria estar configurada como “jdbc:hsqldb:file:C:/Banco”. Também podemos configurar um banco de dados em memória na opção “HSQL Database Engine In-Memory”. Por fim, basta escolhermos o nome de usuário e senha para acesso ao Banco de dados. A URL, o nome de usuário e a senha serão utilizados posteriormente nas configurações do Hibernate, portanto é bom guardar essas informações.

Caso um Banco de dados já tenha sido criado anteriormente ou estamos tentando acessar um Banco de dados recém-criado basta escolher o banco de dados em “Recent Setting”. No exemplo da Figura 2 escolhermos o Banco de dados “dbcomarcas” e clicamos em OK para se conectar ao Banco de Dados.

Figura 2. Conectando ao banco já criado.

Agora temos acesso a todas as tabelas já criadas nessa base de dados na parte esquerda da tela conforme ilustra a Figura 3.

Figura 3. Acesso às tabelas da base de dados.

Também podemos digitar comandos SQL na nossa base de dados para criar tabelas, inserir registros, deletar registros, criar chaves primárias ou estrangeiras, etc. Para isso basta digitarmos os comandos SQL no campo de texto no meio da tela do editor gráfico e executar o comando SQL no botão "Execute SQL" conforme ilustra a Figura 4.

Figura 4. Áreas para digitação dos comandos SQL.

Para criar uma tabela no nosso banco de dados poderíamos, por exemplo, digitar o comando SQL da Listagem 1.

Listagem 1. Criando tabela


  CREATE TABLE Usuario (
          id IDENTITY PRIMARY KEY,
          nome VARCHAR(50)
  ); 

Para executar o comando basta clicar no botão “Execute SQL”.

Após isso a nossa tabela poderá ser encontrada no canto esquerdo da tela conforme já mostrado anteriormente.

O HSQLDB gera alguns arquivos no diretório onde especificamos a criação do banco de dados. Entre os arquivos criados podemos verificar o arquivo "nomeDoBanco.script". Este arquivo de script contém os comandos de definição de tabelas, alterações, inserções e outros objetos do banco de dados. Outro arquivo encontrado no diretório é o "nomeDoBanco.log" que contém as alterações recentes da base de dados. Este arquivo é utilizado para gravar alterações realizadas nos dados e será removido quando fecharmos a conexão com o banco. No entanto, se tivermos um encerramento anormal com o banco de dados este arquivo de log será utilizado na próxima inicialização do banco de dados para refazer as alterações. Um arquivo "nomeDoBanco.lck" também pode ser criado pelo hsqldb quando um processo bloqueia o banco de dados. Normalmente temos esse arquivo no diretório somente enquanto o programa está sendo executado e assim sendo ele é automaticamente excluído quando pararmos o programa. Por fim, temos também um arquivo "nomeDoBanco.properties" que contém as propriedades com que o hsqdb é inicializado.

Utilizando HSQLDB com Hibernate

Para utilizar o Hibernate com HSQLDB devemos configurá-lo no arquivo hibernate.cfg.xml conforme a Listagem 2.

Listagem 2. Exemplo do arquivo hibernate.cfg.xml para se conectar ao HSQLDB.


  <?xml version='1.0' encoding='utf-8'?>
  <!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
   
  <hibernate-configuration>
   
      <session-factory>
   
          <!—Configurações de Conexão com a Database -->
          <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
          <property name="connection.url">jdbc:hsqldb:file:C:/banco/dbcomarcas;hsqldb.lock_file=false</property>
          <property name="connection.username">user</property>
          <property name="connection.password">senha</property>
   
          <!-- JDBC connection pool (Usando built-in) -->
          <property name="connection.pool_size">1</property>
   
          <!-- SQL dialect -->
          <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
   
          <!-- Habilita o Gerenciamento de contexto automático da sessão do Hibernate -->
          <property name="current_session_context_class">thread</property>
   
          <!—Desabilita a Cache secundária -->
          <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
   
          <!—Imprime todos os SQLs executados -->
          <property name="show_sql">true</property>
   
          <!—Excluir e re-cria o esquema da base de dados na inicialização -->
          <property name="hbm2ddl.auto">update</property>
          
          <mapping class="pacote.NossaClasseEntidade"/> 
    <mapping class="pacote.NossaClasseEntidade2"/> 
          
   
      </session-factory>
   
  </hibernate-configuration>
  

O "connection.driver_class" especifica o driver do HSQLDB instalado. Não podemos esquecer-nos de colocar o driver (arquivo .jar que vem no pacote baixado) na nossa aplicação. Em "connection.url" temos a configuração da nossa url com o banco de dados conforme criamos mais acima neste tutorial. Ainda neste elemento adicionamos um parâmetro na url "hsqldb.lock_file=false" para evitar o bloqueio do banco de dados quando acessado por duas threads. Quando utilizamos o HSQLDB é interessante usarmos o "org.hibernate.dialect.HSQLDialect" em "dialect". Por fim, na tag "<mapping class="pacote.NossaClasseEntidade"/>" configuramos todas as nossas classes mapeadas (@Entity).

Agora basta colocarmos o arquivo de configuração do Hibernate na raiz do projeto (pasta src), o driver do hsqldb na pasta da aplicação e executá-la efetuando um teste. Segue na Listagem 3 um código de teste para verificarmos se tudo foi realizado com sucesso.

Listagem 3. Exemplo de teste com hibernate e hsqldb.


  Configuration configuration = new Configuration().configure();
  StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
           applySettings(configuration.getProperties());
   
  SessionFactory factory = configuration.buildSessionFactory(builder.build());
   
  Session session = HibernateUtil.getSessionFactory().openSession();
   
  Transaction t = session.beginTransaction();
  List<Usuarios> lista = session.createQuery("from Usuarios").list();
  t.commit();
   
  for(Usuarios usuario : lista) {
           System.out.println("Nome: " + usuario.getNome());
           System.out.println("Username: " + usuario.getUsername());
  }
          
  session.close();
  

Vale ressaltar que utilizamos o Hibernate 4 para este exemplo. Após isso podemos verificar que tudo foi realizado com sucesso. Agora já podemos construir nossas aplicações utilizando Hibernate e HSQLDB.

Bibliografia

[1] HSQLDB. Disponível em hsqldb.org/.

[2] HyperSQL Database Repository. Disponível em http://mvnrepository.com/artifact/org.hsqldb/hsqldb.