SQLite

O SQLite pode ser definido como uma biblioteca de processo que implementa um banco de dados SQL autocontido, sem configuração, sem servidor e motor transacional. No caso do seu código-fonte está disponibilizado em domínio público e neste caso é gratuito para fins privados e comerciais. SQLite tem ligações a várias linguagens de programação como C, C++, BASIC, C#, Python, Java e Delphi. O COM (ActiveX) wrapper que torna o SQLite mais acessível principalmente a linguagens de script no Windows, também como VB Script e JavaScript, adicionando assim muitos mais recursos para aplicativos HTML. Também está disponível em sistemas operacionais incorporados, como iOS, Android, Symbian OS, Maemo, Blackberry e WebOS devido ao seu pequeno tamanho e facilidade de uso.

SQLite é uma biblioteca de processo que implementa um mecanismo de banco de dados SQL. O código para SQLite é de domínio público e portanto, livre para uso para qualquer finalidade, comercial ou privada. SQLite é atualmente encontrado em mais aplicativos, incluindo vários projetos de alto nível.

SQLite é um mecanismo de banco de dados SQL incorporado e não possui um processo de servidor separado como a maioria dos outros bancos de dados SQL. Ele lê e grava diretamente em arquivos de disco comuns. O formato do arquivo de banco de dados é multiplataforma. Assim, esses recursos irão tornar o SQLite uma escolha popular e com formato de arquivo de aplicativo. SQLite é uma biblioteca compacta, o tamanho da biblioteca pode ser menor que 500 KiB, dependendo da plataforma de destino e das configurações de otimização do compilador. Se os recursos opcionais forem omitidos, o tamanho da biblioteca SQLite pode ser reduzida abaixo de 300 KiB. O SQLite também pode ser executado em espaço mínimo de pilha (4KiB).

A maior parte do código-fonte SQLite é dedicada exclusivamente a testes e verificação. O SQLite responde normalmente a falhas de alocação de memória e erros de E/S de disco. É claro que, mesmo com todos esses testes, ainda há problemas. Mas o SQLite é aberto e honesto sobre todos os bugs e fornece listas de bugs incluindo listas de bugs críticos e cronologias minuto a minuto de relatórios de bugs e mudanças de código.

Segue um modelo da arquitetura do SQLite abaixo:

Figura 1. Arquitetura SQLite

A arquitetura do SQLite é relativamente simples, ela é composta por quatro partes:

  1. Core, a parte principal contém a interface do usuário, o processador de comandos SQL e a máquina virtual.
  2. SQL compiler, contém um tokenizer, um analisador e um gerador de código.
  3. Backend, contém B-Tree, Page Cache, OS Interface: Um banco de dados SQLite é mantido em disco usando uma B-tree implementação encontrada no arquivo fonte btree.c.
  4. Acessórios contém Utilitários e código de teste: SQLite fornece algumas funcionalidades relacionadas à utilitários, como memória alocação e rotinas de comparação de strings sem maiúsculas e minúsculas estão localizadas em util.c mais da metade da base de código total do SQLite é dedicado a testes.

Podemos demonstrar, com um pequeno exemplo a criação de uma agenda telefônica utilizando o SQLite:

# Criando a tabela agenda:
CREATE TABLE agenda(
	id INTEGER PRIMARY KEY,
	nome VARCHAR(30),
	tel VARCHAR(20)
);

Uma forma interessante de guardar todos os comandos digitados é criar um arquivo com extensão .sql e depois é só entrar no ambiente e digitar o comando .read arquivo.sql, que ele irá abrir todo o conteúdo do arquivo. Vamos mostrar como podemos inserir alguns dados na minha tabela agenda criada:

INSERT INTO agenda(nome, tel) VALUES ('Central de Transplantes', '0800-8832323');
INSERT INTO agenda(nome, tel) VALUES ('Disque-Silencio', '3452-6927');
INSERT INTO agenda(nome, tel) VALUES ('Bombeiros', '193');
INSERT INTO agenda(nome, tel) VALUES ('Ambulância', '192');
INSERT INTO agenda(nome, tel) VALUES ('Policia Militar', '190');
INSERT INTO agenda(nome, tel) VALUES ('Defesa Civil', '199');
INSERT INTO agenda(nome, tel) VALUES ('Disque Cidade Limpa', '0800-851531');

Já com algumas linhas inseridas, agora podemos fazer algumas consultas na nossa tabela:

$ sqlite telefones.db
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> .read telefones.sql
sqlite> SELECT * FROM agenda;
1|Central de Transplantes|0800-8832323
2|Disque-Silencio|3452-6927
3|Bombeiros|193
4|Ambulância|192
5|Policia Militar|190
6|Defesa Civi|199
7|Disque Cidade Limpa|0800-851531

Agora vamos criar nosso modelo de banco de dados para cadastro dos postos de gasolina: