LT++: Biblioteca C++ para Acesso ao Gerenciador de

Propaganda
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: [email protected]
3
Professor do Departamento de Informática da UFV, Ph.D in Computer Science. email: [email protected]
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( )
sqlite3_exec( )
sqlite3_prepare ( )
sqlite3_close( )
sqlite3_finalize( )
sqlite3_get_table( )
Abre um banco de dados SQLite
Executa uma instância SQL
Prepara uma instância SQL para execução
Fecha um banco de dados SQLite
Deleta uma instância SQL processada
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
sqlite3
char
sqlite3_stmt
char
Int
int
int
int
int
Descrição
*db;
*ErrMsg;
*Stmt;
**azResult;
rc
size
column
cursor
total
Handler da conexão com o SQLite
Mensagem de erro da SQL processada
Handler da setença SQL precessada
Vetor de apontadores contendo os dados retornados da consulta
Status(sucesso ou falha) do resultado da SQL processada
Numero de linhas da tabela
Número de colunas da tabela
Indice de linha da tabela
Numero de campos da tabela
Tabela 3 – Métodos da classe ltQuery
Métodos
Descrição
void
Open
( sqlite3*)
( string )
bool
Sql
bool
Sql
( char* )
bool
Sel
( string )
bool
Sel
( char* )
void
bool
int
int
int
bool
bool
char*
uchar*
char
short
int
long
float
double
char*
char*
int
char*
Free
Fetch
Columns
Size
Cursor
Empty
IsNull
Text
Blob
Char
Short
Int
Long
Float
Double
Date
Time
Type
Name
( void
( void
( void
( void
( void
( void
( int
( int
( int
( int
( int
( int
( int
( int
( int
( int
( int
( int
( int
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
Abre o banco de dados para acesso
Executa operações de update, insert e delete para a SQL passada
como string
Executa operações de update, insert e delete para a SQL passada
como char*
Executa a operação de select para a SQL passada como string e
grava todo o resultado na variável azResult
Executa a operação de select para a SQL passada como char* e
grava todo o resultado na variável azResult
Libera a memória alocada para a variável azResult
Retorna uma linha da consulta processada
Retorna o número de colunas resultante da consulta
Retorna o número de linhas resultante da consulta
Retorna o numero da coluna corrente
Verifica se há dados na consulta
Verifica se um campo da consulta é nulo
Retorna um dado do tipo texto
Retorna um dado do tipo blob
Retorna um dado do tipo char
Retorna um dado do tipo short
Retorna um dado do tipo int
Retorna um dado do tipo long
Retorna um dado do tipo float
Retorna um dado do tipo double
Retorna um dado do tipo data
Retorna um dado do tipo tempo
Retorna um tipo de dado
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
ltQuery *Query
= new ltDriver();
= 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;
Download