Banco de Dados Embarcado com SQLite

De Wiki do Veiga

Tabela de conteúdo

Introdução

SQLite é um bando de dados embarcado que funciona na forma de uma biblioteca. Com SQLite é possível manter um banco de dados SQL completo com múltiplas tabelas, índices, triggers e views em um único arquivo. Além disso SQLite pode ser cross-compilado e o tamanho da biblioteca pode ser tão pequeno quanto 300KB. Por esses motivos, SQLite é uma opção popular de banco de dados para sistemas embarcados com limitação de recursos.

Este texto contém um pequeno tutorial de como instalar e utilizar SQLite, inclusive com um exemplo em linguagem C.

Instalação

Instalação do SQLite:

apt-get install sqlite3 sqlite3-doc libsqlite3-dev

Instalação do SQLite Browser, um a interface gráfica para manipular base de dados do SQLite:

apt-get install sqlitebrowser

Exemplo de Utilização

Linha de Comando

Criando uma base de dados via linha de comando.

$ sqlite3 test.db
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE pessoa (
   ...> id INTEGER PRIMARY KEY,
   ...> nome VARCHAR(30),
   ...> idade NUMERIC);
sqlite> INSERT INTO pessoa VALUES(0,'marcelo',26);
sqlite> INSERT INTO pessoa VALUES(1,'pedro',30);
sqlite> .explain ON
sqlite> SELECT * FROM pessoa;
id    nome           idad
----  -------------  ----
0     marcelo        26  
1     pedro          30 
sqlite> UPDATE pessoa SET idade = 20 WHERE id = 1;
sqlite> SELECT * FROM pessoa;
id    nome           idad
----  -------------  ----
0     marcelo        26  
1     pedro          20 
.exit

Também é possível executar um dump e visualizar o SQL utilizado para montar o banco de dados.

$ sqlite3 test.db
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .dump 
BEGIN TRANSACTION;
CREATE TABLE pessoa (
id INTEGER PRIMARY KEY,
nome VARCHAR(30),
idade NUMERIC);
INSERT INTO "pessoa" VALUES(0,'marcelo',26);
INSERT INTO "pessoa" VALUES(1,'pedro',20);
INSERT INTO "pessoa" VALUES(2,'pedro',30);
COMMIT;
sqlite>.exit

SQLite Browser

Acessando com o browser:

sqlitebrowser teste.db

Programa em C

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
	int i;
	for (i = 0; i < argc; i++) {
		printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
	}
	printf("\n");
	return 0;
}

int main(int argc, char **argv)
{
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;

	if (argc != 3) {
		fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
		exit(1);
	}
	rc = sqlite3_open(argv[1], &db);
	if (rc) {
		fprintf(stderr, "Can't open database: %s\n",
			sqlite3_errmsg(db));
		sqlite3_close(db);
		exit(1);
	}
	rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
	if (rc != SQLITE_OK) {
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	}
	sqlite3_close(db);
	return 0;
}

Compilando:

gcc -o exe sqlite.c -lsqlite3 -Wall

Testando com o arquivo teste.db criado anteriormente:

./exe teste.db "select * from pessoa" 
id = 0
nome = marcelo
idade = 26

id = 1
nome = pedro
idade = 20

Referências


Marcelo Veiga Neves < marcelo.veiga at gmail.com >

Ferramentas pessoais