Você está na página 1de 8

lt++: Biblioteca C++ para Acesso ao Gerenciador de Banco de Dados SQLite

Pedro de Brito Cavalcanti Neto1, Brauliro Gonalves Leal2, Srgio Aurlio Ferreira Soares1, Mrio Godoy Neto2, Ricardo Argenton Ramos2
1

Graduando do Curso de Engenharia da Computao Universidade Federal do Vale do So Francisco (UNIVASF) Juazeiro BA Brasil Professor do Colegiado de Engenharia da Computao Universidade Federal do Vale do So Francisco (UNIVASF) Juazeiro BA Brasil
{pdibrito, eng.sergiosoares}@gmail.com, {brauliro.leal, mario.godoy, ricardo.aramos}@univasf.edu.br

Abstract. SQLite is a software library that implements a self-contained and serverless database engine. The lt++ is a library developed in C++ to access and obtain data in SQLite. It is divided in two classes, ltDriver and ltQuery. The first connects to the database and provides access services, the second executes the commands in a controlled way to manipulate data from SQL database. Both SQLite and lt++ are easily handled and suitable for use in teaching SQL language, database projects or using in small applications. The lt++ library is freely available for download on the site www.univasf.edu.br/brauliro.leal~/download.htm. Resumo: SQLite uma biblioteca de software que implementa um sistema de banco de dados SQL independente e sem servidor. A lt++ uma biblioteca desenvolvida em linguagem C++ para acesso e obteno de dados no SQLite. Esta biblioteca divide-se em duas classes, ltDriver e ltQuery. A primeira conecta-se ao banco de dados e fornece servios de acesso, a segunda executa de modo controlado os comandos SQL para manipular dados da base de dados. Tanto a SQLite quanto a lt++ so de fcil manipulao e indicadas para uso no ensino de SQL e Banco de Dados e em aplicaes de pequeno porte. A biblioteca lt++ est disponvel gratuitamente para download no stio www.univasf.edu.br/~brauliro.leal/download.htm.

1. Introduo
1.1. Banco de Dados Banco de dados ou base de dados um conjunto de registros dispostos em estrutura regular que possibilita a reorganizao dos mesmos e sua manipulao (Elmasri e Navathe, 2002). Atualmente, grandes bases de dados gerenciam a maioria das aes do nosso cotidiano. Pode-se tomar como exemplo de banco de dados, o conjunto dos CPFs e ttulos eleitorais de uma comunidade. Bancos de dados no armazenam simplesmente dados, eles devem ser capazes de manipul-los. Isso se d atravs de instrues para atualizao, incluso e excluso de dados ou grupo de dados.

Os Sistemas Gerenciadores de Bancos de Dados (SGBDs) so um conjunto de aplicaes que permitem a interao entre usurios e banco de dados atravs de computadores. Esses SGBDs so responsveis pelo controle, acesso e coordenao de dados de bancos de dados. Dentre os diversos SGBDs pode-se citar o Oracle, SQL Server, MySQL, DB2, Postgre SQL, Firebird e SQLite. Cada um com suas caractersticas prprias, tornando-os vantajosos ou no para um determinado tipo de aplicao. 1.2. SQLite O SQLite pode ser definido como uma ferramenta, mais precisamente uma biblioteca, desenvolvida em linguagem C padro ANSI que pode ser integrada a programas escritos em diferentes linguagens, possibilitando assim a manipulao de dados atravs de comandos SQL. A incluso desta biblioteca em um programa se d de forma bastante simples. Seu stio www.sqlite.org, onde se encontra cdigos fonte para download e informaes para seu uso. Algumas das caractersticas do SQLite so: a) software livre, domnio pblico e multiplataforma; b) transaes atmicas, consistentes, isoladas e durveis; c) no necessita de instalao, configurao ou administrao; d) implementa maior parte do SQL92; e) o banco de dados completo armazenado em apenas um arquivo de sistema; e f) suporta base de dados acima de 2 terabytes. Sistemas que utilizam SQLite no necessitam de um servidor para acessar seus dados, ou seja , ela l e escreve diretamente em seu arquivo para acessar seus dados. Seu uso recomendado onde a simplicidade da administrao, implementao e manuteno so mais importantes que incontveis recursos dos SGBDs mais voltados para aplicaes complexas. Devido a sua simplicidade, seu uso apropriado tambm para o ensino de SQL. Sua utilizao recomendada para sistemas web com menos de cem mil requisies por dia, dispositivos e sistemas embarcados, aplicaes desktop, aprendizado de banco de dados, dentre outros. Existe uma vasta bibliografia sobre SQLite que pode ser consultada em Owens (2006). 1.2. Linguagem de Consulta Estruturada Linguagem de Consulta Estruturada ou Structured Query Language (SQL) uma linguagem interpretada padro ANSI para o acesso a banco de dados. Ela composta pelas: Data Manipulation Language (DML) Linguagem de Manipulao de Dados, um subconjunto da SQL para inserir, atualizar e remover dados. Data Definition Language (DDL) Linguagem de Definies de Dados, que permite definir novas tabelas e elementos associados. Data Control Language ( DCL) Linguagem de Controle de Acesso, que controla quem tem acesso para ver ou manipular dados dentro de um banco. Data Transaction Language (DTL) Linguagem de Transao de Dados, usada para a transio de um banco de dados.

Data Query Language (DQL) Linguagem de Consulta de Dados mais utilizada. Permite especificar uma consulta. 1.2. lt++ A biblioteca lt++ foi desenvolvida em linguagem C++ para gerenciar bancos de dados SQLite. Ela multiplataforma, de fcil utilizao e dividida em duas classes: ltDriver e ltQuery. A primeira responsvel pela conexo com a base de dados e a segunda pela manipulao de dados atravs de comandos SQL. Cada aplicao que necessita utilizar um banco de dados SQLite deve incluir tanto a biblioteca lt++ quanto a biblioteca SQLite para a manipulao de bancos de dados. A lt++ trabalha em conjunto com a SQLite na manipulao e execuo dos comandos SQL. Para aplicaes escritas em C++ que acessam bancos de dados SQLite, conveniente que essa comunicao se d de maneira simples e prtica, assim o objetivo principal que a lt++ sirva como um facilitador entre o usurio e o SQLite, fornecendo assim um conjunto de funes que so de fcil utilizao. A Figura 1 ilustra de forma geral a dinmica de uso da biblioteca lt++ em conjunto com o SQLite.

Figura 1 - Viso geral da utilizao da biblioteca lt++

A lt++ open-source e sua licena a mesma do SQLite. Seu o cdigo fonte e programas exemplo esto disponveis gratuitamente para download no stio www.univasf.edu.br/~brauliro.leal/download.htm.

2. Materiais e Mtodos
A linguagem de programao utilizada no desenvolvimento da biblioteca lt++ foi o C++. Utilizou-se funes e estruturas definidas no arquivo sqlite3.h da biblioteca SQLite. Foram consultados ainda documentos, exemplos, e manuais obtidos no stio oficial, www.sqlite.org. A Tabela 1 apresenta as principais funes da biblioteca SQLite utilizadas pela lt++.

Tabela 1. Funes da biblioteca sqlite3.h

Funes sqlite3_open() sqlite3_exec() sqlite3_prepare() sqlite3_close() sqlite3_finaliza()

Descrio Abre um Banco de Dados Executa uma instncia SQL Prepara uma instncia para execuo Fecha um Banco de Dados SQLite Deleta uma instncia SQL processada

sqlite3_get_table() Executa uma instncia SQL e grava o resultado

3. Resultados e Discusses
A biblioteca lt++ divida em duas classes, so elas: ltDriver e ltQuery. A classe ltDriver conecta e desconecta um banco de dados atravs dos mtodos bool Attach(char*file) e void Detach (void), respectivamente. O parmetro passado para a primeira funo o nome do arquivo que contm o banco de dados. Essa classe tem a varivel pblica sqlite3 *db, um handler da conexo. Ele inicializado na funo Attach e utilizado pela classe ltQuery. Observe que o mtodo Attach no necessita de nome de usurio e senha, j que o SQLite no necessita de administrao. Os mtodos da classe ltDriver so apresentados na Tabela 2.
Tabela 2. Mtodos da classe ltDriver

Mtodos bool Attach (char*) void Detach (void) string itos (int) string ftos (double)

Descrio Abre o banco de dados Fecha o banco de dados Converte um inteiro para uma string Converte um double para string

A classe ltQuery possui os mtodos responsveis pela obteno dos dados de um banco de dados j aberto por um objeto da classe ltDriver. Para tanto, basta lig-los atravs da execuo do mtodo open. A Tabela 4 apresenta os mtodos e uma breve descrio de suas funcionalidades. Os mtodos Sql e Sel so responsveis por executarem sentenas SQL. J os mtodos que possuem o mesmo nome de tipos de dados, como Int, Float, Double e Time, possuem a tarefa de recuperar e retornar um dado deste mesmo tipo resgatando-o de uma determinada clula da tabela resultante. Outra forma de recuperar dados das consultas utilizar o mtodo Text, que retorna qualquer tipo de dado convertido em String.

Tabela 3. Mtodos da classe ltQuery

Mtodos bool Sql (string) bool Sql (char*) bool Sel (string) bool Sel (char*) bool Free (void) bool Fetch (void) int Columns (void) int Size (void) int Cursor (void) bool Empty (void) bool IsNull char* Text (int) uchar* Blob (int) char Char (int) short Short (int) int Int (int) long Long (int) float Float (int) double Double (int) char* Date (int) char* Time (int) int Type (int) char* Name (int)

Descrio Executa operaes update, insert e delete para a SQL passada como string Executa operaes update, insert e delete para a SQL passada como char* Executa operaes de select para a SQL passada como string Executa operaes de select para a SQL passada como char* Libera a memria alocada para a varivel azResult Retorna uma linha da consulta processada Retorna o nmero de colunas resultante da consulta Retorna o nmero de linhas resultante da consulta Retorna o nmero da coluna corrente Verifica se h dados na consulta Verifica se um campo de 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

void open (sqlite3*) Abre o banco de dados para acesso

A classe ltQuery contm ainda atributos privados que so utilizados principalmente para guardar informaes sobre a conexo e resultados de sentenas SQL e indicar erros na execuo de comandos. Os atributos dessa classe e uma breve descrio de suas funcionalidades so apresentados na Tabela 3.

Tabela 4. Variveis da classe ltQuery

Variveis sqlite3 *db char *ERRMsg char **azResult int rc int size int column int cursor int total

Descrio Handler da conexo com o SQLite Mensagem de erro SQL processada Vetor de apontadores contendo retornados da consulta de dados os dados

sqlite3_stm *Stm Handler da sentena SQL processada

Status (sucesso ou falha) do resultado da SQL processada Nmero de linhas da tabela Nmero de colunas da tabela ndice da linha na tabela Nmero de campos da tabela

Para uma melhor compreenso das funes disponveis na biblioteca, foi desenvolvido um programa exemplo que utiliza a maioria das funes apresentadas nas tabelas 2 e 3 e est disponvel em anexo. O banco de dados lt++.db do programa exemplo composto por uma tabela que possui a seguinte estrutura:
Tabela 5. Descrio dos campos da tabela do banco de dados lt++.db

Campo A0 A1 A2 A3 A4 A5 A6

Tipo Integer Integer Numeric(15,2), Nvarchar(26) Varchar(26) Time Date

Para criar uma nova base de dados e adicionar a tabela descrita acima, o usurio pode utilizar algum programa administrador de bases de dados para o SQLite como, por exemplo, o SQLite Administrator disponvel em http://sqliteadmin.orbmu2k.de/. O programa gratuito e de fcil manipulao. Aps a criao, o programa exemplo, apresentado em anexo j pode ser executado.

4.Concluso
A biblioteca lt++ foi desenvolvida em C++ com recursos bsicos para conectar-se ao gerenciador de banco de dados SQLite. Ela caracteriza-se por ser multiplataforma, muito simples e de fcil uso. A lt++ dividida em duas classes ltDriver e ltQuery. A primeira conecta-se ao banco de dados e fornece servios de acesso, a segunda executa, de modo controlado, comandos SQL atravs de seus mtodos, obtendo assim informaes a partir da base de dados. A biblioteca foi testada e mostrou-se satisfatria.

Sua licena de uso a mesma que a do SQLite e est disponvel para download tanto o cdigo fonte quanto um programa fonte para teste no site http://www.univasf.edu.br/~brauliro.leal/download.htm.

5.Referncias
Elmasri, R.; Navathe, S. B. (2002), Sistemas de Banco de Dados Fundamentos e Aplicaes, Editora LTC, 3 edio. Owens, Michael. (2006), The Definitive Guide to SQLite, Springer-Verlag. SQLite, SQLite home page, Disponvel em : < http://www.sqlite.org>. Acesso em: 23 Fev 2011.

6.Anexo
Programa exemplo do uso da biblioteca lt++.
#include <stdio.h> #include "ltQuery.h" #include "ltDriver.h" int main( void ) { ltDriver *db = new ltDriver(); ltQuery *Query = new ltQuery(); if( db->Attach("lt++.db") ) { printf("\n Erro no attach ... "); system("pause"); exit(1); } Query->Open( db->db ); Query->Sel("delete from A" ); for( int i = 0; i < 10; i++ ) { Query->Sql("insert into A(A0,A1,A2,A3,A4,A5,A6) values(" + db->itos(i) + ",1,1.2, 'abcde','abcde','11:11:11','11.11.2011');"); } Query->Sel("select * from A" ); while( Query->Fetch() ) { printf("%d ", Query-> Int(0) printf("%d ", Query-> Int(1) printf("%f ", Query->Float(2) printf("%s ", Query-> Text(3) printf("%s ", Query-> Text(4) printf("%s ", Query-> Text(5) printf("%s ", Query-> Text(6) printf("\n"); }

); ); ); ); ); ); );

Query->Sel("select * from A" ); while( Query->Fetch() ) { for( int i = 0; i < Query->Columns(); i++ ) { printf("%s %s ",Query->Name(i), Query->Text(i) ); } printf("\n"); } db->Detach(); delete Query; delete db; return 0; }