Este post vai servir para explorar os comandos mais comuns do SQLite, e familiarizar o utilizador com a linha de comandos.
Começando com o básico:
Para criar uma base de dados em SQLite basta digitar o comando “sqlite3″ seguido no nome da base de dados a criar (ou a abrir, para o caso desta já existir). Por exemplo, para criar uma base de dados com o nome “teste.db” basta digitar o seguinte:
$ sqlite3 teste.db
SQLite version 3.3.6
Enter ".help" for instructions
sqlite> .quit
$
A base de dados “teste.db” é criada, caso esta ainda não exista. A execução do comando acima, deixa o utilizador no ambiente consola do SQLite, para abandonar basta digitar “.quit”, “.q” ou “.exit”, qualquer um dos comandos o fará abandonar a aplicação.
Entre novamente na base de dados, “teste.db” e vamos começar por criar uma tabela, com o nome “t1″, como se pode ver em baixo.
$ sqlite3 teste.db
SQLite version 3.3.6
Enter ".help" for instructions
sqlite> create table t1 (t1key INTEGER PRIMARY KEY, data TEXT,num DOUBLE, timeEvent DATE);
sqlite>
Após de criada a tabela digite os seguintes comandos para adicionar dados a tabela.
sqlite> insert into t1 (data, num) values ('Isto é um exemplo de texto', 3);
sqlite> insert into t1 (data, num) values ('isto é outro exemplo', 6);
sqlite> insert into t1 (data, num) values ('e mais outro', 9);
Agora fazendo um “select * from t1″ podemos observer os valores inseridos:
1|Isto é um exemplo de texto|3.0|
2|isto é outro exemplo|6.0|
3|e mais outro|9.0|
Como se pode ver no SQLite uma chave primária quando declarada como “INTEGER PRIMARY KEY” é assumida como “auto-incrementavel” se nenhum valor for definido.
Por outro lado a chave “data” definida como sendo do tipo DATA, não possui nenhum valor por defeito.
NOTA: Muito importante para que um atributo funcione como auto-incremental este tem que ser definido usando o tipo INTEGER e nunca a abreviatura INT.
Existem dois comandos internos do SQLite que vão se revelar bastante uteis aos utilizadores, eles são o “.table” e o “.schema”.
O “.table” exibe o nome de todas as tabelas existentes na base de dados.
sqlite> .table
t1
sqlite>
Por outro lado o comando “.schema” exibe o esquema, total das tabelas, ou seja, este comando exibe o comando utilizado para criar cada uma das tabelas.
sqlite> .schema
CREATE TABLE t1 (t1key INTEGER PRIMARY KEY, data TEXT, num DOUBLE, timeEvent DATE);
sqlite>
Um funcionalidade interessante é a capacidade de limitar a saída de um “select” a um dado número de linhas, há vez, para conseguir esse resultado utiliza-se os comandos “limit” e “offset”.
O comando limite exibe um dado numero linhas, apartir inicio da tabela por defeito, ou apartir de um dado offset, sendo assim usando apenas o “limit” com o “select”, temos:
sqlite> SELECT * FROM t1 limit 2;
1|Isto é um exemplo de texto|3.0|
2|isto é outro exemplo|6.0|
sqlite>
Como se pode ver, temos 3 registos dentro da tabela “t1″, contudo apenas os dois primeiros são exibidos devido ao uso do comando “limit”.
Agora vamos observar o uso ao mesmo tempo dos comandos “limit” e “offset”, para tentar apenas exibir a ultima linha, neste caso a linha numero 3,
sqlite> SELECT * FROM t1 order by t1key limit 1 offset 2;
3|e mais outro|9.0|
sqlite>
Exportar e Importar a base de dados
Uma das operações mais fáceis de efectuar é a exportação e importação da base de dados.
A exportação é simples e faz-se recorrendo ao comando “.dump”, este comando despeja para a consola, todos os comandos de criação e regras de inserção na base de dados, acabando efectivamente por exportar todo o conteúdo desta.
$ sqlite3 teste.db ".dump"
BEGIN TRANSACTION;
CREATE TABLE t1 (t1key INTEGER PRIMARY KEY, data TEXT, num DOUBLE, timeEvent DATE);
INSERT INTO "t1" VALUES(1, 'Isto é um exemplo de texto', 3.0, NULL);
INSERT INTO "t1" VALUES(2, 'isto é outro exemplo', 6.0, NULL);
INSERT INTO "t1" VALUES(3, 'e mais outro', 9.0, NULL);
COMMIT;
Pode-se também usar o comando “.dump” dentro do ambiente do SQLite3, fazendo depois copy, past do conteúdo.
Se deseja-se-mos armazenar o conteúdo da base de dados “teste.db” para um ficheiro com o nome “teste.sql” bastava fazer o seguinte:
$ sqlite3 teste.db ".dump" > teste.sql
Por fim para importar o conteúdo de uma base de dados, neste caso o “teste.sql” para uma nova base de dados, chamada teste2.db, bastava fazer o seguinte:
$ sqlite3 teste2.db < teste.sql
Triggers
Como eu já tinha falado o SQLite pode ser uma base de dados pequeno e leve, mas mesmo assim não deixa de ser muito poderoso, sendo assim vamos terminar este post, com uma amostra de como usar triggers. Um trigger numa definição grosseira, é um mecanismo que neste caso, no despontelar de um determinado evento (“delete”,”insert”, “update” e “update of”), realizar uma dada operação sobre a base de dados, de forma automática. Uma operação bastante simples será fazer com que automaticamente a medida que se vão inserido dados na tabela “t1″, o campo da data fosse preenchido. Sendo assim vamos criar um trigger que no fim de adicionado uma nova linha a “t1″ este adicione por si a data actual do sistema, para tal basta fazer:
sqlite> CREATE TRIGGER insert_t1_timeEvent AFTER INSERT ON t1
BEGIN UPDATE t1 SET timerEvent = DATETIME('now') WHERE rowid = mew.rowid;
END;
Como se pode reparar este trigger é accionado apenas depois do comando “insert” ser executado, como se pode constatar pelo uso da instrução “AFTER INSERT”.
Convêm referir que todos os trigger tem um nome associado, neste caso “insert_t1_timeEvent”.
Fonte: Unsignedint