• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
8
0
0

Texto

(1)

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

de Dados SQLite

Pedro de Brito Cavalcanti Neto1, Brauliro Gonçalves Leal2, Sérgio Aurélio Ferreira Soares1, Mário Godoy Neto2, Ricardo Argenton Ramos2

1Graduando do Curso de Engenharia da Computação – Universidade Federal do Vale do

São Francisco (UNIVASF) – Juazeiro – BA – Brasil

2Professor do Colegiado de Engenharia da Computação – Universidade Federal do Vale

do São 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 obtenção de dados no SQLite. Esta biblioteca divide-se em duas classes, ltDriver e ltQuery. A primeira conecta-se ao banco de dados e fornece serviços de acesso, a segunda executa de modo controlado os comandos SQL para manipular dados da base de dados. Tanto a SQLite quanto a lt++ são de fácil manipulação e indicadas para uso no ensino de SQL e Banco de Dados e em aplicações de pequeno porte. A biblioteca lt++ está disponível gratuitamente para download no sítio www.univasf.edu.br/~brauliro.leal/download.htm.

1. Introdução 1.1. Banco de Dados

Banco de dados ou base de dados é um conjunto de registros dispostos em estrutura regular que possibilita a reorganização dos mesmos e sua manipulação (Elmasri e Navathe, 2002). Atualmente, grandes bases de dados gerenciam a maioria das ações do nosso cotidiano. Pode-se tomar como exemplo de banco de dados, o conjunto dos CPFs e títulos eleitorais de uma comunidade. Bancos de dados não armazenam simplesmente dados, eles devem ser capazes de manipulá-los. Isso se dá através de instruções para atualização, inclusão e exclusão de dados ou grupo de dados.

(2)

Os Sistemas Gerenciadores de Bancos de Dados (SGBDs) são um conjunto de aplicações que permitem a interação entre usuários e banco de dados através de computadores. Esses SGBDs são responsáveis pelo controle, acesso e coordenação 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 características próprias, tornando-os vantajosos ou não para um determinado tipo de aplicação.

1.2. SQLite

O SQLite pode ser definido como uma ferramenta, mais precisamente uma biblioteca, desenvolvida em linguagem C padrão ANSI que pode ser integrada a programas escritos em diferentes linguagens, possibilitando assim a manipulação de dados através de comandos SQL. A inclusão desta biblioteca em um programa se dá de forma bastante simples. Seu sítio é www.sqlite.org, onde se encontra códigos fonte para download e informações para seu uso.

Algumas das características do SQLite são: a) software livre, domínio público e multiplataforma; b) transações atômicas, consistentes, isoladas e duráveis; c) não necessita de instalação, configuração ou administração; 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 não 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 administração, implementação e manutenção são mais importantes que incontáveis recursos dos SGBDs mais voltados para aplicações complexas. Devido a sua simplicidade, seu uso é apropriado também para o ensino de SQL. Sua utilização é recomendada para sistemas web com menos de cem mil requisições por dia, dispositivos e sistemas embarcados, aplicações 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 padrão ANSI para o acesso a banco de dados. Ela é composta pelas:

Data Manipulation Language (DML) – Linguagem de Manipulação de Dados, um subconjunto da SQL para inserir, atualizar e remover dados.

Data Definition Language (DDL) – Linguagem de Definições 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 Transação de Dados, usada para a transição de um banco de dados.

(3)

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 fácil utilização e dividida em duas classes: ltDriver e ltQuery. A primeira é responsável pela conexão com a base de dados e a segunda pela manipulação de dados através de comandos SQL.

Cada aplicação que necessita utilizar um banco de dados SQLite deve incluir tanto a biblioteca lt++ quanto a biblioteca SQLite para a manipulação de bancos de dados. A lt++ trabalha em conjunto com a SQLite na manipulação e execução dos comandos SQL. Para aplicações escritas em C++ que acessam bancos de dados SQLite, é conveniente que essa comunicação se dê de maneira simples e prática, assim o objetivo principal é que a lt++ sirva como um facilitador entre o usuário e o SQLite, fornecendo assim um conjunto de funções que são de fácil utilização. A Figura 1 ilustra de forma geral a dinâmica de uso da biblioteca lt++ em conjunto com o SQLite.

Figura 1 - Visão geral da utilização da biblioteca lt++

A lt++ é open-source e sua licença é a mesma do SQLite. Seu o código fonte e programas exemplo estão disponíveis gratuitamente para download no sítio www.univasf.edu.br/~brauliro.leal/download.htm.

2. Materiais e Métodos

A linguagem de programação utilizada no desenvolvimento da biblioteca lt++ foi o C++. Utilizou-se funções e estruturas definidas no arquivo sqlite3.h da biblioteca SQLite. Foram consultados ainda documentos, exemplos, e manuais obtidos no sítio oficial, www.sqlite.org. A Tabela 1 apresenta as principais funções da biblioteca SQLite utilizadas pela lt++.

(4)

Tabela 1. Funções da biblioteca sqlite3.h

Funções Descrição

sqlite3_open() Abre um Banco de Dados sqlite3_exec() Executa uma instância SQL

sqlite3_prepare() Prepara uma instância para execução sqlite3_close() Fecha um Banco de Dados SQLite sqlite3_finaliza() Deleta uma instância SQL processada

sqlite3_get_table() Executa uma instância SQL e grava o resultado

3. Resultados e Discussões

A biblioteca lt++ é divida em duas classes, são elas: ltDriver e ltQuery. A classe ltDriver conecta e desconecta um 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 arquivo que contém o banco de dados. Essa classe tem a variável pública sqlite3 *db, um handler da conexão. Ele é inicializado na função Attach e é utilizado pela classe ltQuery. Observe que o método Attach não necessita de nome de usuário e senha, já que o SQLite não necessita de administração. Os métodos da classe ltDriver são apresentados na Tabela 2.

Tabela 2. Métodos da classe ltDriver

Métodos Descrição

bool Attach (char*) Abre o banco de dados void Detach (void) Fecha o banco de dados

string itos (int) Converte um inteiro para uma string string ftos (double) Converte um double para string

A classe ltQuery possui os métodos responsáveis pela obtenção dos dados de um banco de dados já aberto por um objeto da classe ltDriver. Para tanto, basta ligá-los através da execução do método open. A Tabela 4 apresenta os métodos e uma breve descrição de suas funcionalidades.

Os métodos Sql e Sel são responsáveis por executarem sentenças SQL. Já os métodos 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 célula da tabela resultante. Outra forma de recuperar dados das consultas é utilizar o método Text, que retorna qualquer tipo de dado convertido em String.

(5)

Tabela 3. Métodos da classe ltQuery

Métodos Descrição

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

bool Sql (string) Executa operações update, insert e delete para a SQL passada como string

bool Sql (char*) Executa operações update, insert e delete para a SQL passada como char*

bool Sel (string) Executa operações de select para a SQL passada como string bool Sel (char*) Executa operações de select para a SQL passada como char* bool 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 número da coluna corrente

bool Empty (void) Verifica se há dados na consulta

bool IsNull Verifica se um campo de 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

A classe ltQuery contém ainda atributos privados que são utilizados principalmente para guardar informações sobre a conexão e resultados de sentenças SQL e indicar erros na execução de comandos. Os atributos dessa classe e uma breve descrição de suas funcionalidades são apresentados na Tabela 3.

(6)

Tabela 4. Variáveis da classe ltQuery

Variáveis Descrição

sqlite3 *db Handler da conexão com o SQLite char *ERRMsg Mensagem de erro SQL processada sqlite3_stm *Stm Handler da sentença SQL processada

char **azResult Vetor de apontadores contendo os dados retornados da consulta de dados

int rc Status (sucesso ou falha) do resultado da SQL processada

int size Número de linhas da tabela int column Número de colunas da tabela int cursor Índice da linha na tabela int total Número de campos da tabela

Para uma melhor compreensão das funções disponíveis na biblioteca, foi desenvolvido um programa exemplo que utiliza a maioria das funções apresentadas nas tabelas 2 e 3 e está disponível em anexo. O banco de dados lt++.db do programa exemplo é composto por uma tabela que possui a seguinte estrutura:

Tabela 5. Descrição dos campos da tabela do banco de dados lt++.db

Campo Tipo A0 Integer A1 Integer A2 Numeric(15,2), A3 Nvarchar(26) A4 Varchar(26) A5 Time A6 Date

Para criar uma nova base de dados e adicionar a tabela descrita acima, o usuário pode utilizar algum programa administrador de bases de dados para o SQLite como, por exemplo, o SQLite Administrator disponível em http://sqliteadmin.orbmu2k.de/. O programa é gratuito e de fácil manipulação. Após a criação, o programa exemplo, apresentado em anexo já pode ser executado.

4.Conclusão

A biblioteca lt++ foi desenvolvida em C++ com recursos básicos para conectar-se ao gerenciador de banco de dados SQLite. Ela caracteriza-se por ser multiplataforma, muito simples e de fácil uso. A lt++ é dividida em duas classes ltDriver e ltQuery. A primeira conecta-se ao banco de dados e fornece serviços de acesso, a segunda executa, de modo controlado, comandos SQL através de seus métodos, obtendo assim informações a partir da base de dados. A biblioteca foi testada e mostrou-se satisfatória.

(7)

Sua licença de uso é a mesma que a do SQLite e está disponível para download tanto o código fonte quanto um programa fonte para teste no site http://www.univasf.edu.br/~brauliro.leal/download.htm.

5.Referências

Elmasri, R.; Navathe, S. B. (2002), Sistemas de Banco de Dados – Fundamentos e Aplicações, Editora LTC, 3ª edição.

Owens, Michael. (2006), The Definitive Guide to SQLite, Springer-Verlag.

SQLite, SQLite home page, Disponível em : < http://www.sqlite.org>. Acesso em: 23 Fev 2011.

(8)

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; }

Referências

Documentos relacionados

Quando você inserir um relatório, deve avisar ao Supervisor para que preencha a Ficha de avaliação (pode ser à mão), disponível para descarga no Portal do EMC. Esta

A pesquisa foi desenvolvida junto à indústria cerâmica Eliane Revestimentos Cerâmicos e está dividida em quatro capítulos que tratam, respectivamente, da utilização do chumbo

Considerando esses pressupostos, este artigo intenta analisar o modo de circulação e apropriação do Movimento da Matemática Moderna (MMM) no âmbito do ensino

seria usada para o parafuso M6, foram utilizadas as equações 14 e 15, referentes aos parafusos de 8 mm de diâmetro e folga entre parafuso e furo de 0,5 mm, que definem,

No entanto, os resultados apresentados pelo --linalol não foram semelhantes, em parte, aos do linalol racêmico, uma vez que este apresenta um efeito vasorelaxante em anéis de

Resumo: O presente trabalho corresponde a um estudo empírico descritivo e exploratório que aborda comportamentos e falas de atores políticos que participaram do processo legislativo

As micotoxinas são compostos químicos tóxicos provenientes do metabolismo secundário de fungos filamentosos e conhecidas pelos danos causados à saúde humana e

onde Qe são as forças de origem externa ao sistema e Qc são as forças de reação. Estas equações não podem ser utilizadas diretamente, pois as forças de