Add new comment

29
Nov

Migrando banco de dados Access para SQLite

Este tutorial trata de como migrar um banco de dados Access para uma plataforma que possa ser executa em um ambiente GNU-Linux.

#0 – Introdução

Um banco de dados Access tem basicamente três artefatos a serem migrados:

  • o banco de dados em si

  • formulários

  • macros que utilizam dados do formulário e manipulam o banco de dados

A primeira opção seria migrar tudo para o Base do OpenOffice. É uma opção válida, que dá menos trabalho para o desenvolvedor (desde que ele saiba utilizar as macros do OpenOffice), mas neste tutorial utilizaremos uma abordagem diferente, assumindo que para o usuário final uma “aplicação pronta” é mais confortável, ou seja, o usuário não precisa saber utilizar o Base (assim como não precisaria saber o Access). Dessa forma também se esconde do usuário detalhes não tão interessantes, como as estruturas das tabelas, e além disso, fica mais fácil garantir a integridade dos dados (evita-se mais facilmente que o usuário altere dados de forma inconsistente).

Uma primeira opção seria migrar o banco de dados para MySQL, e posteriormente fazer o formulário/macros com uma linguagem tipo PHP.

Do ponto de vista do desenvolvedor, isso pode ser bem tranquilo, principalmente pelo fato de a interface gráfica ser feita em HTML.

No entanto, não será muito agradável ao usuário que antes apenas dava dois cliques para o abrir o banco de dados, se ele tiver que agora instalar o apache e configurar o banco de dados!

Então a solução aqui é explorada é o modelo de aplicação stand alone, em que o banco de dados fica armazenado em um mero arquivo, que é acessado por uma aplicação desktop.

Para esta aplicação stand alone o banco de dados escolhido foi o SQLite e a linguagem de programação para manipula-lo Java.

#1 – Exportando o banco

Seja qual for o destino da migração, o primeiríssimo passo é obter a estrutura do banco de dados, ou seja, as tabelas.

Para isso, primeiro:

$sudo apt-get install mdbtools

Para exportar a estrutura do banco de dados basta fazer:

$mdb-schema [banco_de_dados.mdb] > [exportado.sql]

Pronto, a estrutura está salva no arquivo exp.sql em código SQL, que utilizaremos mais tarde.

Neste caso, salvamos apenas a estrutura, mas há formas também de salvar os dados, sendo uma delas:

$mdb-export [banco_de_dados.mdb] [nome_da_datbela] > [exportado.csv ]

Isto gera um arquivo CSV, que nada mais do que uma planilha que pode ser facilmente visualizada no Calc ou mesmo em um editor ASCII (Gedit, Kate etc)

Obs: para saber quais são as tabelas existentes você pode consultar o arquivo SQL gerado ou fazer:

$mdb-tabales [banco_de_dados.mdb]

 


 

#2 – Importando o Banco

Agora temos que passar nossas tabelas para uma plataforma livre de banco de dados, no caso SQLite.

Para instalar:

$sudo apt-get install sqlite3

Para importar o banco de dados:

$ sqlite3 [nome_do_banco.sqlite]
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .read [exportado.sql]

Obs: no SQL gerado pelo mdb, há uma linha “DROP TABLE TabelaPrice;” que no nosso caso gerará um erro no sqlite, pois tenta remover uma tabela que não existe.

Uma solução é simplesmente excluir (ou comentar) essa linha antes de realizar a importação.

 

#3 – Acessando o SQLite no Java

O primeiro passo aqui é obter o conector para o SQLite.

No caso, eu utilizei o conector para o JDBC, que foi baixado em http://www.zentus.com/sqlitejdbc/, e optei pelo arquivo sqlitejdbc-v056.jar.

Bom, para que seu código funcione será necessário adicionar esse jar ao classpath de sua execução.

No Eclipse isto é feito no painel Configure Build Path, que pode ser acessado clicando-se com o botão direito sobre o nome do projeto, na lista de projetos.

No painel do Configure Build Path basta utilizar a opção “add external JAR”.

Pronto, agora podemos programar!

Para testar se o driver está corretamente carregado, podemos fazer:

// Testa o driver

 

try {

Class.forName("org.sqlite.JDBC");
System.out.println("Driver OK");
} catch (ClassNotFoundException e1) {
System.out.println("Driver não encontrado");
e1.printStackTrace();
}

Um vez que isto esteja OK, finalmente vamos no conectar ao banco de dados, dessa forma:

Connection con = DriverManager.getConnection("jdbc:sqlite:banco_de_dados.sqlite");

A classe Connection faz parte do pacote java.sql.

No exemplo dado estamos passando o caminho relativo do banco de dados, mas também podemos passar o absoluto dessa forma:

Connection con = DriverManager.getConnection("jdbc:sqlite:file:/home/leo/banco_de_dados.sqlite");

Agora para finaizar, um exemplo de uma consulta simples:

 

 

// consulta
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery("SELECT * FROM Tabela");
while(rs.next()) {
System.out.println("Parcela: " + rs.getInt("ID"));
System.out.println("Juros: " + rs.getString("Nome"));
}

Agora pode-se traduzir a lógica das macros para a linguagem Java.

Um último passo, não abordado neste tutorial seria a construção de uma interface gráfica para o usuário com API Swing.

 

Bom, então por hoje é isso.

 

Até a próxima!

Leonardo Leite