Utilizando o banco Derby de forma portável

Introdução

Em algumas situações desenvolvemos aplicações de pequeno porte onde queremos utilizar um banco de dados, mas não temos interesse em instalar um SGBD em cada computador que for rodar minha aplicação. Um banco de dados que pode ser usado sem a necessidade de ser instalado é o Apache Derby (a Sun Microsystems utiliza esse mesmo banco de dados com o nome de JavaDB, não sei ao certo a relação entre eles), que é implementado 100% em Java, o que se torna uma excelente opção para aplicações portáveis que utilizam banco de dados e são feitas em Java.

Existem duas formas de se acessar um banco de dados no derby, são elas:

Conexão embarcada: realiza uma conexão diretamente no arquivo da base de dados, por esse motivo não é possível criar mais de uma conexão simultaneamente para a mesma base de dados.

Conexão via serviço de rede: mesmo utilizando o SGBD derby como um banco portável é possível inicializar o serviço de rede sem realizar uma instalação, isso pode ser feito diretamente pelo código, ou pela linha de comando de um terminal, seja (L)unix ou windows.

Requisitos

Os requisitos aqui apresentados se referem a este post, nada impede criar uma aplicação em outra linguagem e utilizar um drive de conexão para o derby.

* Sua aplicação deve ser feita utilizando Java;
* baixar o arquivo: db-derby-v.x.y.z-lib.zip
– derby, derbyclient, derbynet, derbyrun: obrigatórios para executar sua aplicação
– derbytools: jar para executar funções auxiliares do banco de dados, como por exemplo ver info do Derby
– derby_LOCALE_LANGUAGE: adicione sua linguagem para sua aplicação para que o derby possa mostrar as mensagem traduzidas
* Uma JVM instalada no computador cliente

Iniciando o banco de dados derby

Se você for utilizar a conexão embarcada não é necessário iniciar o Apache Derby, uma vez que esse modo não acessa via serviço. Caso contrário você pode iniciar o banco pela linha de comando, utilizando:
java -jar derbynet.jar start
Quando você inicializar o banco pela linha de comando o derby automaticamente irá procurar pela variável de ambiente DERBY_HOME que indica a pasta onde ficam guardados as bases de dados a serem acessadas, no linux você pode definir essa variável através do comando export DERBY_HOME=/home/diretorio, pelo windows, pode-se definir essa variável através Propriedades do Sistema->Avançado->Variáveis de ambiente.

Se preferir, você pode inicializar o banco derby diretamente pelo código de sua aplicação derby, basta inserir as seguintes linhas de código na sua aplicação:

try {
//Aqui você também pode utilizar um caminho relativo, porém lembre-se de que esse
//caminho inicia no mesmo diretório onde você iniciou a aplicação.
System.setProperty("derby.system.home", "/home/usuario/derby");
NetworkServerControlImpl networkServer = new NetworkServerControlImpl();
networkServer.start(new PrintWriter(System.out));
System.out.println("Conectado ao banco de dados.");
} catch (Exception ex) {
System.out.println("Não conseguiu conectar no banco de dados.");
}

Lembre-se de adicionar ao classpath os arquivos jar necessários para sua aplicação.

Caso a variável de ambiente DERBY_HOME não esteja definida (vale tanto para a inicialização via código quanto para a inicialização via terminal) o derby irá procurar automaticamente por base de dados localizadas na pasta de onde você iniciou a aplicação ou executou o comando de iniciar o derby.

Links

Site oficial: http://db.apache.org/derby/
Manual: http://db.apache.org/derby/manuals/index.html
Download: http://db.apache.org/derby/derby_downloads.html#Latest+Official+Release