Você está na página 1de 5

Grupo de Usurios Java (pode trocar pelo seu logotipo)

http://www.cesur.br

HSQLDB: um banco de dados livre escrito em Java


Carlos Emilio Padilla Severo
Este artigo descreve o banco de dados livre HSQLDB, demonstrando suas caractersticas potencialidades e principais ferramentas.

Introduo
O Hypersonic SQL Database (HSQLDB) um projeto de banco de dados livre, escrito em Java, que permite a manipulao de banco de dados em uma arquitetura cliente-servidor, ou standalone. Uma grande vantagem de utilizao do HSQLDB a possibilidade de agregarmos o banco de dados ao pacote de nossas aplicaes. O banco multiplataforma e ocupa um pequeno espao em disco. Outra caracterstica do banco a possibilidade de manipularmos bancos de dados em disco, memria ou em formato texto. Trata-se de uma tecnologia flexvel e muito til na construo de aplicaes que manipulem banco de dados. Nesse artigo, iremos ilustrar as principais caractersticas do banco de dados, destacando-se o conjunto de ferramentas constantes no pacote de distribuio. Trata-se de um banco de dados excelente para pequenas aplicaes escritas em Java.

Pgina do projeto:
HSQLDB project: http://hsqldb.sf.net

Componentes do HSQLDB
No ncleo do pacote esto o RDBMS e o driver JDBC que disponibilizam as principais funcionalidades do banco, que so: o gerenciador de banco de dados relacional e o driver para conexo atravs de aplicaes Java. Alm disso, o pacote contm um conjunto de componentes e ferramentas para execuo do SGBD. Atravs das ferramentas podemos criar estruturas de um banco de dados, acessar bancos de dados atravs de ferramentas para consulta, exportar e importar esquemas entre bancos de dados distintos. Alm de outras facilidades disponibilizadas para o desenvolvedor. A seguir, veremos a descrio de cada um desses componentes: HSQLDB JDBC Driver: o pacote de distribuio disponibiliza um driver padro JDBC para conexo de aplicaes Java com o SGBD. A conexo com o banco de dados segue um modelo de protocolo proprietrio, mas tambm podemos realizar uma conexo via rede, atravs de protocolos Internet. Nesse artigo, veremos como realizar uma conexo de uma aplicao Java com o banco de dados de diversas formas. Database Manager: duas verses de ferramentas para gerenciamento de banco de dados so disponibilizadas. Uma ferramenta escrita usando AWT e uma outra verso usando Swing. Trata-se de uma ferramenta grfica para visualizao do esquema do banco de dados, conjunto de tabelas e submisso de instrues SQL. A verso AWT pode ser executada como um Applet dentro de um navegador. Transfer Tool: essa uma ferramenta utilizada para transferncias de esquemas SQL ou dados de uma fonte JDBC para outra. Trata-se de uma ferramenta bastante til quando desejamos realizar uma migrao de banco de dados, transferindo esquemas e o conjunto de dados entre duas tecnologias distintas. Query Tool:a finalidade dessa ferramenta prover ao desenvolvedor um software para interao com o SGBD atravs do envio de instrues SQL a partir de uma linha de comando, ou atravs de um arquivo texto contendo um conjunto de instrues. A ferramenta apresenta um shell interativo ao usurio. SQL Tool: outra ferramenta do pacote para construo e submisso de instrues SQL ao banco de dados.

Grupo de Usurios Java http://www.guj.com.br Pgina 1

Grupo de Usurios Java (pode trocar pelo seu logotipo)


http://www.cesur.br

HSQLDB RDBMS
Este o mdulo gerenciador do banco de dados relacional disponibilizado pela ferramenta. O HSQLDB pode ser executado de diversas maneiras. Podemos execut-lo como um servidor de banco de dados, ou como um processo em aplicaes standalone. Para cada modo de execuo temos uma forma especfica de conexo com o banco de dados. A forma de conexo dada por um protocolo informado na string que forma a URL de conexo com o banco.

Executando no modo servidor


Para executarmos o gerenciador no modo servidor, devemos invocar o programa Server. O programa recebe alguns argumentos para que possamos iniciar ou criar um novo banco de dados. Podemos passar alguns argumentos por linha de comando, um deles o argumento -? que apresenta uma ajuda na tela. Abaixo, veremos a chamada ao servidor iniciando o banco de dados denominado DBEmpresa.
java org.hsqldb.Server -database.0 DBEmpresa -dbname.0 empresa

O arquivo hsqldb.jar dever estar gravado em um diretrio mapeado atravs da varivel de ambiente classpath, para que a linha de comando acima tenha efeito. O primeiro argumento -database.0 informa o nome do banco de dados. Enquanto que o segundo argumento, o -dbname.0, informa um alias para o banco de dados. Caso o servidor seja carregado sem informarmos algum banco de dados, o mesmo gera um banco de dados padro denominado test.

Executando no modo servidor Web


Uma modalidade de execuo do SGBD como um servidor Web, o qual permite a conexo de uma aplicao Java via protocolo HTTP. Essa caracterstica til quando estamos tentando disponibilizar o banco de dados em mquinas protegidas por firewalls. A linha abaixo, apresenta a forma de execuo no modo servidor Web.
java org.hsqldb.WebServer

Conectando uma aplicao a um servidor Aplicaes clientes realizam uma conexo a um servidor em execuo via JDBC. Para isso, a aplicao dever utilizar o driver disponvel no prprio hsqldb.jar. A seguir, veremos um exemplo de conexo.
try{ Class.forName(org.hsqldb.jdbcDriver); } catch(SQLException e){ System.out.println(Erro ao carregar o driver JDBC. ); } Connection con = DriverManager.getConnection(jdbc:hsqldb:hsql:/localhost/DBEmpresa, sa, );

A conexo do exemplo acima utiliza a porta 9001, que a porta padro para conectar a aplicao Java, via JDBC, com o banco de dados DBEmpresa. O usurio padro do HSQLDB o sa, cuja senha uma string vazia. Conectando uma aplicao no modo standalone Neste caso, o banco de dados far parte da prpria aplicao. Ou seja, ambos sero empacotados juntos e ambos rodaro em uma mesma JVM. Para pequenas aplicaes que sero executadas em um desktop, sem o uso da rede, um conceito muito interessante. Veja, logo abaixo, um exemplo de como realizar uma conexo com um banco de dados standalone:
Connection con = DriverManager.getConnection(jdbc:hsqldb:file:/banco/DBEmpresa, sa, );

Conectando uma aplicao no modo memria


O HSQLDB permite que possamos executar o SGBD de forma que os dados sejam mantidos em memria. Essa uma tcnica que mantm todo o conjunto de dados de uma tabela na memria do
Grupo de Usurios Java http://www.guj.com.br Pgina 2

Grupo de Usurios Java (pode trocar pelo seu logotipo)


http://www.cesur.br

computador, permitindo uma melhor performance do SGBD. Esse modo de execuo dever ser utilizado somente em algumas situaes especiais. A seguir, veremos o exemplo de conexo utlizando o protocolo de memria.
Connection con = DriverManager.getConnection(jdbc:hsqldb:mem:empresa, sa, );

Arquivos do banco de dados


Um banco de dados consiste de dois a cinco arquivos. Todos compartilhando o mesmo nome, mas com extenses que os diferenciam. Por exemplo, um banco de dados chamado DBEmpresa constitudo pelos seguintes arquivos: BDEmpresa.properties: este o arquivo de propriedades que contm alguns ajustes gerais das propriedades do banco de dados. As propriedades podero ser editadas pelo desenvolvedor, o arquivo mantm propriedades como verso do SGBD, caractersticas do cache, se o banco vai ser inicializado em modo somente leitura, entre outras. DBEmpresa.script: nesse arquivo esto contidos os scripts em SQL para criao do esquema do banco de dados. O script cria a estrutura de tabelas, indices, restries, usurios, etc. Alm disso, mantm o conjunto de dados inseridos nas tabelas persistentes do banco. BEmpresa.log: arquivo no formato texto que mantm as alteraes recentes sobre o banco de dados. O arquivo identifica o usurio que acessou o banco e ao realizada pelo mesmo. DBEmpresa.data: como o prprio nome sugere, mantm os dados do banco que esto armazenados em tabelas do tipo cached. Esse tipo de arquivo ser criado quando existirem tabelas do tipo cached no esquema do banco de dados. Para tabelas em memria, os dados so persistidos no arquivo de script. DBEmpresa.backup: trata-se de um arquivo compactado, formato ZIP, que mantm o ltimo estado consistente do banco de dados. Todos os arquivos citados so necessrios, caso existam no diretrio onde foi criado o banco. Nunca devero ser deletados. Se o desenvolvedor no criou tabelas do tipo cached, os arquivos .data e .backup no sero criados.

Tipos de tabelas geradas pelo HSQLDB


O HSQLDB suporta tabelas temporrias e trs tipos de tabelas persistentes. As tabelas temporrias no so armazenadas em disco e sobrevivem somente enquanto a conexo com o banco de dados estiver ativa. Tabelas temporrias so visveis atravs da conexo que as criou, conexes concorrentes no tero acesso as mesmas. Os modelos de tabelas persistentes so: tabelas em memria, tabelas cached e tabelas no formato de arquivo texto. Tabelas em memria o padro de criao quando invocamos o comando CREATE TABLE. Os dados desse tipo de tabela so mantidos em memria, mas qualquer alterao em sua estrutura ou conjunto de dados, sero reportadas para o arquivo em disco com a extenso .script. O arquivo de script carregado quando o banco de dados inicializado. A diferena entre tabelas em memria para as tabelas temporrias que as primeiras so persistidas, enquanto que as demais so destrudas quando uma conexo perdida. J as tabelas do tipo cached so criadas atravs do comando CREATE CACHED TABLE. Esse modelo de tabela diferenciado, pois parte de seus ndices ou dados so mantidos em memria, para obteno de uma melhor performance. Trata-se de uma estrutura de dados mais indicada quando uma tabela armazena um grande volume de dados. O planejamento dos tipos de tabelas dever levar em considerao o volume de dados que iro armazenar. Para tabelas pequenas o ideal se utilizar o modelo de memria. Enquanto que para grandes tabelas o modelo cached mais indicado. As tabelas do tipo texto utilizam um delimitador denominado CSV (Comma Separated Value) para delimitar o contedo do arquivo. Os arquivos neste formato so teis para a importao de estruturas

Grupo de Usurios Java http://www.guj.com.br Pgina 3

Grupo de Usurios Java (pode trocar pelo seu logotipo)


http://www.cesur.br

definidas em outros banco de dados. Trata-se e um modelo de intercmbio de informaes entre tecnologias de banco de dados.

As ferramentas contidas no pacote HSQLDB.JAR


Nessa seo, trataremos de uma ferramenta essencial para o gerenciamento de banco de dados. A ferramenta que iremos analisar a Database Manager, cuja finalidade prover ao desenvolvedor um front-end para definio do esquema do banco. A ferramenta tambm disponibiliza uma interface para interao e envio de instrues SQL via conexo JDBC. Para invocarmos o Database Manager, submetemos a seguinte linha de comando:
java org.hsqldb.util.DatabaseManager

ou

java org.hsqldb.util.DatabaseManagerSwing

Note que o aplicativo est dentro do pacote til e duas verses so disponiblizadas: uma verso utilizando uma interface baseada no conjunto de componentes grficos do pacote AWT; e uma verso que utiliza componentes Swing. A figura 1 apresenta a interface de conexo da ferramenta com um banco de dados. A verso Swing foi utilizada para exemplificao.

Figura 1. Interface de conexo do Database Manager. Na interface de conexo o usurio dever informar o tipo de mecanismo de conexo: servidor, memria, standalone, ou outro; o driver de conexo, a URL, o usurio e a senha do mesmo. A prxima figura, apresenta a interface principal da ferramenta. O Database Manager apresenta uma interface dividida em trs reas de informaes. A primeira rea, disponibilizada esquerda da interface, apresenta uma estrutura hierrquica onde a estrutura do banco de dados poder ser visualizada. Na estrutura o desenvolvedor poder verificar as caractersticas de tabelas, campos, ndices e restries do banco. Alm de outras propriedades do SGBD. Uma rea de edio de instrues SQL apresentada para o usurio, ao lado da rea de propriedades do banco. Nessa rea o desenvolvedor ir escrever e submeter comandos SQL para manuteno de dados e definio do esquema do banco. Os botes apresentados abaixo do menu principal da ferramenta permitem que o usurio limpe a rea de edio para escrita de novos comandos, ou submeta um determinado comando ao SGBD. Os resultados dos comandos de interao do usurio so apresentados em uma rea abaixo da caixa de submisso de instrues SQL. Outras funcionalidades podem ser exploradas atravs do menu principal da ferramenta. Vejamos algumas funes presentes no menu principal. File: possui opes para abertura de scripts SQL gravados em arquivos texto, gravaes de um conjunto de instrues em um arquivo em disco, salvar o resultado de uma consulta em disco e realizao de conexes. View: disponibiliza algumas opes para configurao da forma de apresentao de resultados, assim como, atualizao da estrutura hierrquica que apresenta o esquema e propriedades de um banco de dados. Command: essa opo de menu apresenta um conjunto de instrues SQL para auxlio ao usurio. Ao selecionar uma determinada instruo disponvel no menu, o template j ser apresentado ao usurio na caixa de comandos.

Grupo de Usurios Java http://www.guj.com.br Pgina 4

Grupo de Usurios Java (pode trocar pelo seu logotipo)


http://www.cesur.br

Recent: guarda uma lista das ltimas instrues SQL submetidas pelo usurio atravs da caixa de comandos. Options: mantm um conjunto de opes como controle de transaes, ajuste de autocommit, login e logoff do banco, etc. Tools: permite que o desenvolvedor possa acessar outras ferramentas a partir do Database Manager, tais como: ferramenta para exportao do esquema do banco, restaurao de um esquema exportado e ferramenta para transferncia de informaes.

Figura 2. Interface principal do Database Manager.

Consideraes finais
O RDBMS HSQLDB uma ferramenta muito flexvel para manipulao de banco de dados. Trata-se de uma excelente ferramenta para quem trabalha com Java e para construo de pequenas aplicaes standalone. Em disciplinas voltadas a rea de desenvolvimento de software um grande achado, pois o software cabe em um disquete, tornando-se muito prtico. Para quem trabalha com educao, trata-se de uma excelente opo para o ensino de conectividade de banco de dados com JDBC.
Carlos Emilio Padilla Severo (emilio.severo@gmail.com) professor universitrio, trabalha na FACSUL-CESUR lecionando disciplinas de desenvolvimento de software e coordenando o ncleo de tecnologia da informao da instituio.

Grupo de Usurios Java http://www.guj.com.br Pgina 5