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

Não há comentários.

Comentar