Usando SQLite em sua aplicação Windows Phone

Para que fosse possível lançar rapidamente o Windows Phone, muitos recursos foram deixados de lado nas versões iniciais da plataforma. Muitos recursos úteis, como copiar e colar não existem, além de outras coisas, como o suporte a bancos de dados locais.

Desenvolvedores de aplicações precisavam acessar banco de dados em um servidor remoto para alcançar os resultados desejados. Felizmente, esforços da comunidade open-source foram feitos para suportar o SQLite no Windows Phone, permitindo que a plataforma tenha suporte a banco de dados local antes do lançamento oficial do recurso.

Obtendo a biblioteca do SQLite

O cliente SQLite para o Windows Phone está disponível em http://sqlitewindowsphone.codeplex.com/

Durante a escrita dessa artigo, a última versão disponível era a 0.6.1 (link de download em http://sqlitewindowsphone.codeplex.com/releases/58255/download/191978).

O download (disponível sob a licença LGPL) inclui o código fonte. Quando você extrai o conteúdo do download, observará que terá dois Projetos do Visual Studio, (a) Community.CsharpSqlite.WP (que contém o código do wrapper – invólucro), e (b) um projeto de teste CSharpSqlite.TestProject (que contém um código de exemplo).

Para desenvolvedores de aplicações cujo objetivo seja o suporte a bancos de dados locais, o arquivo binário, que é compilado a partir do projeto “Community.CsharpSqlite.WP” é necesário.

Como o SQLite funciona no Windows Phone Works

O SQLite no Windows Phone usa o recursos de armazenamento isolado em um repositório de dados.

Botando as mãos na massa

Abra o código baixado e compile o código do Cliente SQLite para Windows Phone. Copie o arquivo binário “Community.CsharpSqlite.WP.dll” para um local temporário.

Agora crie um projeto no Visual Studio chamado “WLSQLiteDemo” do tipo “Windows Phone application”, a partir dos modelos disponíveis sob o Silverlight for Windows Phone, no Visual C#.

Create a Visual Studio Project

Quando for questionado pela versão alvo do Windows Phone OS, selecione  WP OS7.1

Target Windows Phone OS Version

No arquivo MainPage.xaml, adicione quatro botões de controle com os títulos: (a) “Create/Open”, (b) “Populate”, (c), “Clear”, e (d) “Close”.

Agora adicione o arquivo do cliente SQLite como uma referência nas configurações do projeto. O arquivo deve estar no local temporário que mencionamos antes.

No código a seguir para o MainPage.xaml (o arquivo MainPage.xaml.cs), adicione as seguintes linhas para que a bibliotecas do SQLite seja disponibilizada ma página.

  1. // MainPage.xaml.cs
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Animation;
  12. using System.Windows.Shapes;
  13. using Microsoft.Phone.Controls;
  14. using SQLiteClient;

Agora precisamos adicionar o manipulador de evento para os eventos de clique nos botões. Mas antes de fazer isso, precisamos adicionar uma variável do tipo SQLiteConnection, que usaremos na aplicação.

  1. public partial class MainPage : PhoneApplicationPage
  2.     {
  3.         SQLiteConnection mySQLiteDB = null;
  4.         // Constructor
  5.         public MainPage()

Agora, podemos adicionar o código que estabelece a conexão com o banco de dados SQLite dentro do manipulador de evento do botão “Create/Open”.

  1. private void buttonOpen_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             if (mySQLiteDB == null)
  4.             {
  5.                 mySQLiteDB = new SQLiteConnection(“MyTestDB”);
  6.                 mySQLiteDB.Open();
  7.                 buttonOpen.IsEnabled = false;
  8.                 buttonClear.IsEnabled = false;
  9.                 buttonPopulate.IsEnabled = true;
  10.                 buttonClose.IsEnabled = true;
  11.             }
  12.         }

O código acima irá garantir que a conexão seja aberta apenas quando um objeto de conexão não exista. Também configura um estado de visibilidade inicial dos outros controles da interface.

Em seguida, precisamos criar uma tabela e popula-la. Nós iremos fazer isso usando o objeto SQLiteCommand.

Em primeiro lugar, criaremos uma tabela que contenha um  ID, um nome e um CEP. Iremos popular essa tabela com dados aletórios.

  1. private void buttonPopulate_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             SQLiteCommand cmd = mySQLiteDB.CreateCommand(“Create table RegisteredStudents (id int primary key,name text,zipcode numeric(7))”);
  4.             int i = cmd.ExecuteNonQuery();
  5.             int id = 0;
  6.             string name = “Name” + id;
  7.             int zipcode = 98000;
  8.             for (int j = 0; j < 10; j++)
  9.             {
  10.                 id++;
  11.                 name = “Name” + id;
  12.                 zipcode = 98000 + id;
  13.                 cmd.CommandText = ” Insert into RegisteredStudents (id, name, zipcode) values (” + id + “,\”” + name + “\”,” + zipcode + “)”;
  14.                 i = cmd.ExecuteNonQuery();
  15.             }
  16.             buttonPopulate.IsEnabled = false;
  17.             buttonClear.IsEnabled = true;
  18.         }

No pedaço de código acima, criamos uma tabela chamada RegisteredStudents e adicionamos 20 registros nela. Também atualizamos a visibilidade dos controles da interface.

O próximo passo envolve a limpeza do banco de dados Aqui podem usar novamente o objeto SQLiteCommand e disparar um script SQL para apagar a tabela.

Iremos fazer isso no manipulador do evento do clique no botão “Clear”.

  1. private void buttonClear_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             SQLiteCommand cmd = mySQLiteDB.CreateCommand(“drop table RegisteredStudents”);
  4.             int i = cmd.ExecuteNonQuery();
  5.             buttonPopulate.IsEnabled = true;
  6.             buttonClear.IsEnabled = false;
  7.         }

No pedaço de código acima, também alteramos a visibilidade dos botões “Clear” e “Populate”

Finalmente, como parte da limpeza da aplicação, fornecemos a habilidade de apagar e liberar a conexão. Isso ajudará a preservar os recursos do sistema

  1. private void buttonClose_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             if (mySQLiteDB != null)
  4.             {
  5.                 mySQLiteDB.Dispose();
  6.                 mySQLiteDB = null;
  7.                 buttonOpen.IsEnabled = true;
  8.                 buttonClear.IsEnabled = false;
  9.                 buttonPopulate.IsEnabled = false;
  10.                 buttonClose.IsEnabled = false;
  11.             }
  12.         }

Agora, devemos compilar a aplicação. Se você quiser, pode adicionar alguns TextBox e associar eles aos campos do banco de dados para poder visualizar os dados inseridos no banco de dados.

Sumário

Nesse artigo aprendemos como criar um banco de dados local no Windows Phone usando as bibliotecas clientes do SQLite. Espero que você tenha achado essa informação útil.

Baixe o código fonte do exemplo desse artigo aqui -> WPSQLiteDemo