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

4 thoughts on “Utilizando o banco Derby de forma portável

  1. Boa noite

    Ei você poderia postar um código de exemplo sobre a forma de conexão do derby com a inicialização do servidor via código. Estou pedindo porque é a resposta
    para as minhas preces para terminar o meu TCC.

    Obrigado.
    Juba

  2. Olá. Gostaria de agradecer pela explicação.

    Nunca tinha usado o Derby e quando implementei em meu projeto e passei para outro computador e não funcionou, já comecei ficar preocupado rsrs.

    Com o código mencionado, o Derby já iniciou corretamente e agora o programa está executando normal..

    Obrigado.

  3. Boa noite Paulo, Minha dúvida é o seguinte:
    Quando faço o BD no Derby é bem tranquilo, faço as conexções. O problema é que quando eu salvo a tabela ( na verdade ela me da a opção de obter a estrutura), é salvo com extenção grab.
    Ao abrir em uma nova conexção a estrutura sob porem os dados contidos na tabela se perdem. Por exemplo, Crio uma novo BD, faço a conexção, crio uma tabela e monto uma estrutura simples, insiro os dados e salvo(Obter Estrutura, não da a opção de salvar o BD)
    Após salvar o progeto, eu tento abrir em outro pc o BD, acontece a mesma coisa, os dados se perdem.
    OBS Uso o Netbeans 8.1
    Pode me ajudar.

    Muito Grato!

Comments are closed.