Home HOW TO Parte uno, Sqlite in Windows Phone 8.1

Introduzione
In questo primo articolo, faremo un’introduzione a uno strumento molto importante legato alla memorizzazione dei dati in maniera permanente nello storage del nostro dispositivo. Da sviluppatori, sapete bene che il supporto alla memorizzazione delle informazioni che siano impostazioni, o dati di altro tipo é molto importante. Al momento il Windows Runtime non dispone in maniera nativa il supporto ai Database, ma mette a disposizione la possibilità di serializzare/deserializzare i dati in diversi formati: xml e json. Seppur molto importanti e di semplice utilizzo, lo svantaggio è che tutte le informazioni devono comunque essere mantenute in memoria a scapito di rallentamenti e impatto sulle performance della nostra applicazione. Per questo motivo, torna utile l’approccio all’utilizzo del Database; un’ottima scelta è di ricorrere a Sqlite. Sqlite è un engine open source, creato e supportato dalla SQLite Consortiun supportato dal Windows Runtime grazie anche alla compatibilità con C++. Scritto in C++, garantisce ottime performance a livello di esecuzione e di qualunque operazione eseguiamo, lavora in modalità dati disconnessa, a differenza per esempio di Sqlserver, dove esiste un servizio chiamato DBMS per l’interazione con i dati. E’ multipiattaforma, quindi oltre Windows Phone Store, è compatibile con Windows Store, Android e altre piattaforme. Infine, è possibile utilizzare alcuni exstension methods di Linq (Language Integrated Query), per la precisione LinqToObject, che vedremo nel corso dell’articolo. Fino ad ora, è stata fatta una semplice introduzione su che cosa è Sqlite, ma per maggiori dettagli e delucidazioni, rimando alla fonte ufficiale. In quest’articolo vedremo nell’ordine:

  • Installazione dell’engine di Sqlite
  • Creazione del progetto
  • Installazione di Sqlite-Net
  • Creazione della classe per il Database
  • Inserimento dei dati
  • Aggiornamento dei dati
  • Eliminazione dei dati
  • Altre classi necessarie
  • Inserimento dei namespace necessari
  • Architettura di compilazione
  • Test dell’applicazione
  • Conclusione

Installazione dell’engine di Sqlite
Prima cosa da fare, non essendoci, come detto, il supporto ai dati in Windows Runtime, vanno installate alcune estensioni per interagire con Sqlite. La prima la troviamo a questo link. Facciamo attenzione a una cosa, in questo caso, installeremo l’estensione adatta a Windows Phone Store, ma se volessimo sviluppare un’applicazione Windows Store, dobbiamo installare l’engine adatto, poiché se abbiamo un progetto Universal App, si tratta non di una singola applicazione, ma siamo di fronte a un progetto che creerà alla fine due applicazioni distinte per piattaforma. Una volta scaricato e installato, lo aggiungeremo al progetto che pian piano andremo a creare nel corso dell’articolo.
Creazione del progetto
E’ arrivato il momento di creare il nostro progetto di esempio. Avviamo VisualStudio 2013, nel mio caso uso la versione professional. Dal menù File, selezioniamo “Nuovo” e subito dopo “Progetto”. Creeremo un’applicazione usando come linguaggio di sviluppo C#. Nei template disponibili alla sezione “Applicazioni Windows Phone”, selezioniamo “Applicazione vuota (Windows Phone)” e assegniamo al progetto il nome “Sqlite Sample” come visibile in figura.

image
Immagine 1.1 I template disponibili per lo sviluppo su Windows Phone.

Attendiamo che l’ambiente di sviluppo sia inizializzato correttamente, e come anticipata nell’introduzione, andiamo ad aggiungere tutte le estensioni necessarie per interagire con Sqlite. Prima cosa, aggiungiamo il riferimento all’engine per Windows Phone, in esplora soluzioni, click con il tasto destro del Mouse su “Riferimenti”, e andiamo a selezionare “Aggiungi riferimento”. Nella finestra di dialogo successiva, sulla sinistra espandiamo la sezione “Estensioni”, se abbiamo installato correttamente l’engine, lo troveremo tra le estensioni disponibili, come mostrato in figura.

image
Immagine 1.2 L’engine di Sqlite per Windows Phone 8.1.

Adesso in concomitanza alla stesura dell’articolo la versione è la 3.8.7.4, per cui tutte le esercitazioni saranno con questa versione. Al momento, abbiamo installato il primo dei due elementi necessari, questo perché l’engine in se é scritto in C++, per cui per interagire richiederebbe che il progetto sia C++, dando poi non pochi problemi per chi non conosce tale linguaggio, o se abbiamo incluso il tutto in un progetto C# come nel nostro caso. Per questo motivo, sono state create delle librerie da diversi sviluppatori, in grado di astrarre quello che è in realtà l’engine di Sqlite, attraverso una serie di metodi e classi che aiutano lo sviluppatore a interagirne scrivendo codice con linguaggi di alto livello come C# e VB NET. Una di queste librerie si chiama Sqlite-net.
Installazione dell’engine di Sqlite-net
Con tale libreria, saremo in grado di eseguire tutte le operazioni che si fanno normalmente in un Database, come Insert, Delete, Update ed eseguire delle query di ricerca. Sqlite-net inoltre, offre un approccio tipico dell’Orm, si prenda come esempio LinqToSql o l’ultimo attuale EntityFramework. In più, ha il supporto a LinqToObject, per cui è possibile eseguire delle ricerche su collezioni di oggetti come Liste e ObservableCollection. Per maggiori dettagli, rimando alla documentazione ufficiale ed esempi che trovate a questo link. Essendo come detto una libreria di terze parti, dobbiamo aggiungerla al nostro progetto. Il modo più semplice è ricorrere a Nuget. Ritorniamo al nostro progetto, sempre in “Riferimenti”, tasto destro del mouse, selezioniamo il comando “Gestisci pacchetti Nuget”. Nella finestra di dialogo successiva, digitiamo nella casella di ricerca che troviamo in alto a destra “Sqlite-net”, come visibile in figura.

image
Immagine 1.3 La libreria Sqlite-net su Nuget.

Dopo aver trovato la libreria, e fatto click sul pulsante “Installa”, se tutto va a buon fine, ha, com’è visibile in figura, un cerchio verde con il segno di spunta al suo interno, questo sta a significare che è stata installata correttamente. Abbiamo installato tutto il necessario; è ora di procedere alla creazione del database, ma prima guardiamo cosa è stato aggiunto dopo l’istallazione dell’engine di Sqlite e Sqlite-net.

image
Immagine 1.4 La finestra esplora soluzioni dopo l’installazione dei file necessari.

Abbiamo il riferimento SQLite for Windows Phone 8.1 nei riferimenti, si tratta dell’engine che abbiamo aggiunto per primo, e i file SqLite.cs e SQLiteAsync.cs, appartenenti all’installazione della libreria Sqlite-net, con i quali saremo in grado di eseguire operazioni sul Database.
Creazione della classe per il Database
Come detto prima, Sqlite-net, offre un approccio tipico dell’orm, per cui non dovremmo preoccuparci del database, ma di creare la o le classi necessarie per poi eseguirne la creazione mediante la libreria e l’engine di Sqlite. Click con il mouse sul nome del progetto, quindi Sqlite Sample, tasto destro, e scegliamo il comando “Aggiungi” e dopo “Nuova Cartella”. La chiameremo “Classes”, al suo interno metteremo tutto ciò che riguarda l’interazione con il database e altro. Con la stessa procedura creiamo un’altra cartella, e la chiameremo “Screen”dove inseriremo, le schermate che compongono la nostra applicazione. Nella cartella Classes creiamo una nuova Classe denominata “Employee”, la procedura resta sempre quella per la creazione delle cartelle, ma scegliendo il comando “Classe”. All’interno del file inseriamo il codice che segue.

using SQLite;
namespace SqlLite_Sample.Classes
{
    class Employee
    {
        [PrimaryKey,AutoIncrement]
        public int Id { get; set; }
        [MaxLength(30)]
        public string Name { get; set; }
        [MaxLength(30)]
        public string SurName { get; set; }
        [MaxLength(3)]
        public int Age { get; set; }
    }

} Com’è possibile notare, abbiamo semplicemente creato una classe chiamata Employee, che contiene quattro Proprietà, con degli attributi inseriti tra parentesi quadre, che daranno altra personalizzazione. E’ utile sapere che in questo caso, sarà creato all’interno del Database, una tabella con lo stesso nome della classe, quattro campi esattamente con lo stesso nome delle proprietà, sarà dedotto automaticamente il tipo di dato per i campi, varchar per Name e SurName, int per Id e Age. Inoltre con gli attributi, personalizziamo ulteriormente queste quattro proprietà, per il campo Id, gli diciamo mediante “PrimaryKey” che si tratta del campo contatore e che sarà aumentato automaticamente, questo mediante l’attributo “AutoIncrement”. Definiamo una lunghezza massima di trenta caratteri per i campi Name e SurName, e un massimo di tre numeri per il campo Age. Abbiamo definito una semplice classe che rappresenterà un dipendente, definendone il nome, cognome ed età. Nella schermata MainPage, definiamo una semplice interfaccia grafica che ci consentirà di accedere alle altre schermate. Copiamo questo codice xaml nel file MainPage.xaml. 
 

    <Grid x:Name=”LayoutRoot”>
        <Grid.ChildrenTransitions>
            <TransitionCollection>
                <EntranceThemeTransition/>
            </TransitionCollection>
        </Grid.ChildrenTransitions>
        <Grid.RowDefinitions>
            <RowDefinition Height=”Auto”/>
            <RowDefinition Height=”*”/>
        </Grid.RowDefinitions>
        <!– Pannello del titolo –>
        <StackPanel Grid.Row=”0″ Margin=”19,0,0,0″>