domingo, 4 de outubro de 2015

SQLite3 API C - abrindo e fechando o banco de dados


A versão do banco de dados SQLite3 tem uma API de programação em C com mais de 70 funções. Esse post é o primeiro de uma série que tem como objetivo mostrar como programar utilizando SQLite3 e a linguagem C.

Abrindo o banco de dados

Antes de conseguirmos fazer consultas, inserções, atualizações e deleções temos que abrir o banco de dados.
Podemos abrir o banco de dados com as funções sqlite3_open() ou sqlite3_open16():

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
int sqlite3_open16(
  const void *filename,   /* Database filename (UTF-16) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);

Essas funções abrem o arquivo de banco de dado e retorna um objeto de conexão que pode ser utilizado por outras funções. Se o nome do arquivo (filename) é NULL ou ":memory:", o banco de dados será criado na memória RAM e só ira durar durante uma sessão. Já se o nome for uma string o banco de dados nesse arquivo será aberto. Caso nenhum arquivo com o nome especificado exista, um novo banco de dados será criado.

Mais informações sobre essas funções podem ser obtidas em http://sqlite.org/c3ref/open.html. Nos iremos mostrar o funcionamento com um exemplo.

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

   rc = sqlite3_open("test.db", &db);

   if( rc ){
      fprintf(stderr, "Nao consigo abrir o banco de dados: %s\n", 
              sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stderr, "Banco de dados aberto com sucesso\n");
   }
   ...

Fechando um banco de dados


Uma conexão pode ser fechada utilizando a função sqlite3_close():

int sqlite3_close(sqlite3*);

Essa função fecha o banco de dados que já estava aberto. Todos as consultas preparadas devem ser finalizada antes do fechamento. Se alguma consulta permanecer não finalizada, sqlite3_close() irá retornar SQLITE_BUSY com a mensagem de erro apropriada.

Agora nosso exemplo fica mais completo.

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

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

   rc = sqlite3_open("test.db", &db);

   if( rc ){
      fprintf(stderr, "Can't open database: %s\n", 
              sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stderr, "Opened database successfully\n");
   }
   sqlite3_close(db);
}