Você está na página 1de 4

LT++: BIBLIOTECA C++ PARA ACESSO AO BANCO DE DADOS SQLITE

Renato S. Bonatto1, Aedra M. Virgílio2, Leacir N. Bastos3, Brauliro G. Leal4

RESUMO: Desenvolveu-se uma biblioteca em C++ com os recursos básicos para


conectar-se ao gerenciador de banco de dados SQLite. Ela caracteriza-se por ser
multiplataforma (Unix, Linux e Windows), muito simples e de fácil uso. Possui duas
classes, ltDriver e ltQuery. A primeira conecta-se ao banco de dados e fornece
serviços de acesso a segunda a qual executam, de modo controlado, comandos
SQL através de funções, obtendo-se informações a partir do banco de dados. A sua
licença de uso é a mesma que a do SQLite. A biblioteca foi testada e mostrou-se
satisfatória e está disponível para download tanto o código fonte quanto um
programa fonte para teste no site www.ufv.br.dpi/bastos.l.n./lt++.

PALAVRAS-CHAVE: biblioteca em C++, banco de dados, multiplataforma.

LT++: LIBRARY C++ FOR ACCESS TO DATABASE SQLITE MANAGER

ABSTRACT: A library in C++ was developed with basic resources to connect the
database manager SQLite. It’s characterized by being multi-platform (Unix, Linux and
Windows), very simple and of easy use. It possesses two classes, ltDriver and
ltQuery. The first is connected to the database and it supplies access services
second which they execute, in a controlled way, commands SQL through functions,
being obtained information starting from the database. It’s license of use is the same
that the one of SQLite. The library was tested and revealed satisfactory and it is
available for so much download the code source as a program source for test in the
site www.ufv.br.dpi/bastos.l.n./lt++.

KEYWORDS: library in C++, database, multi-platform

INTRODUÇÃO
O termo Banco de Dados foi criado para indicar coleções organizadas de
dados armazenados em computadores. Conceitualmente, é uma coleção de dados
relacionados que podem ser registrados, por exemplo, nomes, números de telefone
e endereços. Um típico banco de dados representa algum aspecto do mundo real e
é usado para fins específicos por um ou mais grupos de usuários. Utilizados em
diversas aplicações, tornou-se um componente essencial no cotidiano da sociedade
moderna. Ao longo de um dia quase todos nós encontramos diversas atividades que
envolvem alguma interação com um banco de dados. Por exemplo, se vamos a um
banco para depositar ou retirar dinheiro, se fazemos uma reserva em um hotel ou
companhia aérea. Um banco de dados é usualmente definido, acessado e
manipulado por meio de uma coleção de programas, o Sistema Gerenciador de
Banco de Dados (SGBD). Atualmente existem diversos SGBDs, tais como: Oracle,
SQL Server, MySQL, DB2, PostGree, Firebird, SQLite etc. Cada um tem suas

1
Bacharel em Ciência da Computação pela Universidade Federal de Viçosa. email: renatobonatto@
yahoo.com.br
2
Bacharel em Sistemas de Informação pela UNIPAC 2005. email: aedra.system@gmail.com
3
Professor do Departamento de Informática da UFV, Ph.D in Computer Science. email: leacir@ufv.br
4
Doutor em Engenharia Agrícola pela UFV 1999, Diretor Científico do Grupo Intec. email: leal@
grupointec.com.br
características próprias o que os tornam vantajosos ou não para determinados tipos
de aplicação.
O SQLite é uma pequena biblioteca C que implementa um banco de dados
relacional completo. Algumas de suas características são: Software Livre, domínio
público e Multiplataforma; Transações atômicas, consistentes, isoladas e duráveis
(ACID) mesmo que o sistema trave ou a energia falhe; Não necessita de instalação,
configuração ou administração; Implementa a maior parte do SQL92; O banco de
dados completo é armazenado em apenas um arquivo de sistema; Suporta bases de
dados acima de 2 terabytes. Sistemas que a utilizam não necessitam de servidor
para acessar seus dados, ou seja, ela lê e escreve diretamente em seus arquivos.
Seu uso é recomendado onde a simplicidade da administração, implementação e
manutenção são mais importantes que incontáveis recursos que SGBDs mais
voltados para aplicações complexas possivelmente implementam. Devido a sua
simplicidade, seu uso é apropriado também para o ensino de SQL. Exemplos de uso
são sites (com menos de cem mil requisições por dia, dispositivos e sistemas
embarcados, aplicações desktop, aprendizado de banco de dados entre outros.
Com tudo, para o desenvolvimento de aplicações C++ que acessam o SQLite,
é conveniente que essa comunicação seja de maneira simples e prática. Dessa
forma, o objetivo desse trabalho foi desenvolver uma biblioteca em C++ que permita
a utilização do banco de dados SQLite de forma simplificada.

MATERIAIS E MÉTODOS
A linguagem de programação utilizada foi o GNU C++. Utilizou-se ainda
funções e estruturas definidas no arquivo de inclusão sqlite3.h da biblioteca SQLite,
cuja documentação encontra-se em [1]. As principais funções disponíveis
encontram-se na Tabela 1:

Tabela 1 – Principais funções utilizadas do arquivo de inclusão sqlite3.h

Funções Descrição
sqlite3_open( ) Abre um banco de dados SQLite
sqlite3_exec( ) Executa uma instância SQL
sqlite3_prepare ( ) Prepara uma instância SQL para execução
sqlite3_close( ) Fecha um banco de dados SQLite
sqlite3_finalize( ) Deleta uma instância SQL processada
sqlite3_get_table( ) Executa uma instância SQL e grava o resultado

RESULTADO E DISCUSSÃO
Foram escritas duas classes em C++ para fazer o acesso ao SGBD SQLite,
denominadas ltDriver e ltQuery. A primeira conecta e desconecta-se ao banco de
dados através dos métodos bool Attach (char *file) e void Detach( void )
respectivamente. O parâmetro passado para a primeira função é o nome do banco
de dados. Essa classe tem a variável publica sqlite3 *db que é o handler da
conexão. Ele é inicializado na função Attach e será utilizado pela classe ltQuery. Os
demais métodos da classe fornecem serviços de acesso a classe ltQuery.
A classe ltQuery contém as variáveis privadas descritas na Tabela 2 e os
métodos públicos descritos na Tabela 3.
Tabela 2 – Variáveis da classe ltQuery
Variáveis Descrição
sqlite3 *db; Handler da conexão com o SQLite
char *ErrMsg; Mensagem de erro da SQL processada
sqlite3_stmt *Stmt; Handler da setença SQL precessada
char **azResult; Vetor de apontadores contendo os dados retornados da consulta
Int rc Status(sucesso ou falha) do resultado da SQL processada
int size Numero de linhas da tabela
int column Número de colunas da tabela
int cursor Indice de linha da tabela
int total Numero de campos da tabela

Tabela 3 – Métodos da classe ltQuery

Métodos Descrição
void Open ( sqlite3*) Abre o banco de dados para acesso
( string ) Executa operações de update, insert e delete para a SQL passada
bool Sql
como string
Executa operações de update, insert e delete para a SQL passada
bool Sql ( char* )
como char*
Executa a operação de select para a SQL passada como string e
bool Sel ( string )
grava todo o resultado na variável azResult
Executa a operação de select para a SQL passada como char* e
bool Sel ( char* )
grava todo o resultado na variável azResult
void Free ( void ) Libera a memória alocada para a variável azResult
bool Fetch ( void ) Retorna uma linha da consulta processada
int Columns ( void ) Retorna o número de colunas resultante da consulta
int Size ( void ) Retorna o número de linhas resultante da consulta
int Cursor ( void ) Retorna o numero da coluna corrente
bool Empty ( void ) Verifica se há dados na consulta
bool IsNull ( int ) Verifica se um campo da consulta é nulo
char* Text ( int ) Retorna um dado do tipo texto
uchar* Blob ( int ) Retorna um dado do tipo blob
char Char ( int ) Retorna um dado do tipo char
short Short ( int ) Retorna um dado do tipo short
int Int ( int ) Retorna um dado do tipo int
long Long ( int ) Retorna um dado do tipo long
float Float ( int ) Retorna um dado do tipo float
double Double ( int ) Retorna um dado do tipo double
char* Date ( int ) Retorna um dado do tipo data
char* Time ( int ) Retorna um dado do tipo tempo
int Type ( int ) Retorna um tipo de dado
char* Name ( int ) Retorna o nome da coluna da tabela

CONCLUSÃO
Desenvolveu-se uma biblioteca em C++ com os recursos básicos para
conectar-se ao gerenciador de banco de dados SQLite. Ela caracteriza-se por ser
multiplataforma (Unix, Linux e Windows), muito simples e de fácil uso. Possui duas
classes, ltDriver e ltQuery. A primeira conecta-se ao banco de dados e fornece
serviços de acesso a segunda a qual executam, de modo controlado, comandos
SQL através de funções, obtendo-se informações a partir do banco de dados. A sua
licença de uso é a mesma que a do SQLite. A biblioteca foi testada e mostrou-se
satisfatória e está disponível para download tanto o código fonte quanto um
programa fonte para teste no site www.ufv.br.dpi/bastos.l.n./lt++.

REFERÊNCIAS BIBLIOGRÁFICAS
[1] ELMASRI, R.; NAVATHE, S. B. Sistemas de Banco de Dados - Fundamentos e
[2] Aplicações, 3° edição, Editora LTC, 2002
[3] SQlite. Disponível em http://pt.wikipedia.org/wiki/SQLite
[4] Documentação do SQLite. Disponível em: http://www.sqlite.org/capi3ref.html.
Acesso: 10 Set 2007.

ANEXO:

Resumo do código fonte utilizado para acessar o SQLite através da biblioteca lt++

#include “sqlite3.h”
#include "ltQuery.h"
#include "ltDriver.h"

ltDriver *db = new ltDriver();


ltQuery *Query = new ltQuery();

db->Attach("teste.db");

Query->Open( db->db );

Query->Sel("SELECT * FROM teste");

for( int i = 0; i < Query->Columns(); i++ )


printf(" %s ",Query->Name(i) );

printf("\n campos= %d\n", Query->Columns() );

while( Query->Fetch() )
{
for( int i = 0; i < Query->Columns(); i++ )
printf(" %s ",Query->Text(i) );
printf(" %d ",Query->Int(1) );
printf("\n");
}

db->Detach();

delete Query;
delete db;

Você também pode gostar