É possível iniciar uma aplicação de iOS com o SQLite integrado, porém, isso pode ser feito apenas para o template de Master Detail Application e nem de longe essa é a abordagem mais didática pela quantidade de código existente. Também é possível que você queira começar com outro tipo de aplicação, como game kit ou tabbed view application e aí a integração precisa ser feita manualmente.
Em teoria, o processo é simples: basta incluir e linkar uma biblioteca na nossa aplicação. Mas na prática é necessário um pouco mais de conhecimento da interface do Xcode.
Vamos começar criando um novo projeto. Dê um nome qualquer e quando for solicitado o template, sugiro o Single View Application por ser a forma mais básica de se iniciar um aplicativo. Não é importante para esse caso em específico mas você deve sempre marcar o uso de Storyboards e ARC, o contador de referências do Obj-C. Não marcar isso é garantia de dor de cabeça para os iniciantes em Obj-C. No futuro posso falar mais sobre essas duas opções, em especial ao ARC e porque você deve amá-lo.
Então vamos incluir a biblioteca SQLite ao nosso projeto. Na tela inicial do Xcode, no canto esquerdo deve aparecer o nome do seu projeto, com um ícone de App (Aquela folha azul com um “A”). Selecione-a e imediatamente à direita vai aparecer PROJECT e TARGETS. Selecione o Target que possui o nome do seu App. Nas abas, selecione Build Phases e expanda “Link Binary With Libraries”. Pronto, estamos no local correto. Agora basta clicar no “+” para adicionar uma nova biblioteca.
Como você pode ver, existem várias bibliotecas disponíveis. Queremos apenas libsqlite3.dylib.
Se você é novo no Xcode, estamos mexendo exatamente na parte da configuração que inclui os arquivos necessários ao nosso App. Por exemplo, se adicionarmos uma imagem é também nessa aba que informamos ao compilador a existência da imagem e que ela deve ser anexada ao pacote do aplicativo como recurso. Por sorte o Xcode trata de forma automática esse tipo de coisa mas já me deparei com situações em que eu precisei adicionar e remover recursos manualmente. Se você se deparar com essa situação, esse é o lugar.
Por último, basta abrir o header de onde você vai fazer a manipulação do banco de dados e adicionar no topo do arquivo:
1 |
#import <sqlite3.h> |
Funções importantes do SQLite
Quando você utiliza um banco de dados SQLite, é bom saber uma pequena lista de funções úteis escritas em libsqlite.dylib. Algumas são:
sqlite3_open() – Abre um arquivo de banco de dados. Se o arquivo não existe, ele é criado.
sqlite3_close() – Fecha uum banco de dados aberto anteriormente.
sqlite3_prepare_v2() – Prepara para execução um código SQL
sqlite3_step() – Executa o código preparado com a função sqlite3_prepare_v2()
sqlite3_column_<tipo>() – Retorna um campo dos resultados de uma operação de busca. <tipo> é substituido como o tipo de dados a ser extraído (text, blob, byts, int, int16…)
sqlite3_finalize() – Apaga o código SQL armazenado anteriormente com sqlite3_prepare_v2()
sqlite3_exec() – Combina a funcionalidade de sqlite3_prepare_v2(), sqlite3_step() and sqlite3_finalize() em uma única chamada.
Declarando um banco SQLite
Antes de tudo, precisamos declarar as variáveis da nossa aplicação que irão trabalhar diretamente com o banco. Fazemos isso incluindo diretamente no arquivo .h:
1 |
sqlite3 *contatosBD; //Declara um apontador para nossa estrutura de dados SQLite |
Abrindo um banco de dados
Uma vez declarado, o arquivo deve ser aberto com a função sqlite3_open(). Se o arquivo não existe, ele é criado nos recursos do aplicativo. A sintaxe completa da função é a seguinte:
1 |
int sqlite3_open(const char *arquivo, sqlite3 **bancodedados); |
Na sintaxe acima, arquivo é um caminho (path) para o arquivo do banco de dados na forma de uma string UTF-8 e o bancodedados é a referência para a estrutura sqlite3. O exemplo completo de criação fica conforme abaixo:
1 2 3 4 5 6 7 8 9 10 |
sqlite3 *contatosBD; //Declara um apontador para nossa estrutura de dados SQLite const char *caminhoparabanco = [databasePath UTF8String]; // Converte uma NSString para char UTF-8 if (sqlite3_open(caminhoparabanco, &contatosBD) == SQLITE_OK) { //Banco aberto com sucesso } else { //Falha na abertura do banco } |
Isso é tudo o que você precisa sabar para integrar um banco SQLite ao seu App. Na próxima parte vamos executar comando básicos sobre esse banco, como o CREATE e DELETE.