Proprio pochi giorni fa vi ho parlato, tramite un post, dello stato attuale del supporto a SQLite da parte di Windows Phone. Nel giro di qualche settimane le cose sono un po’ cambiate, dato che Peter Huene, uno sviluppatore, ha realizzato un porting della libreria originale sqlite-net per Windows Phone 8. Tale porting consente di utilizzare l’engine nativo di SQLite (di cui ho parlato nel post precedente e che è disponibile tramite la Visual Studio Gallery) in un’applicazione Windows Phone 8, utilizzando la stessa libreria di manipolazione dati (sqlite-net) che è disponibile anche su Windows 8. Questo vi permette di realizzare uno strato di accesso ai dati che sia facilmente utilizzabile su entrambe le piattaforme.
Al momento il progetto non è disponibile su NuGet, sono richiesti perciò due passaggi per poterlo utilizzare: il primo è quello di aggiungere una libreria nativa alla vostra soluzione, che funge da wrapper per le funzionalità utilizzate da sqlite-net; il secondo è quello di scaricare una versione specifica di sqlite-net, in grado di utilizzare l’engine nativo anche su Windows Phone (mentre, la versione originale, su Windows Phone fa uso di un altro engine, chiamato csharp-sqlite).
Iniziamo!
Facciamo amicizia con GitHub
Entrambi i progetti sono ospitati da GitHub, un sito molto popolare che ospita progetti open source e che funge anche da source control basato su Git. Il modo migliore per scaricare i progetti è proprio quello di affidarsi a Git: potete scaricare anche l’intero progetto in un singolo file zip ma, in questo modo, non sarete sincronizzati con il repository originale. Di conseguenza, ogni volta che lo sviluppatore farà una modifica sarete costretti a riscaricare l’intero progetto da capo. Il modo più semplice per lavorare con i repository di GitHub è utilizzare il tool GitHub for Windows, disponibile per il download sul sito ufficiale.
Dopo averlo installato e lanciato dovrete configurarlo per la prima volta: per farlo, vi servirà un account su GitHub, se non ce l’avete semplicemente collegatevi sul sito e createne uno. Dopodichè dovreste trovarvi davanti ad una schermata molto simile a questa:
A meno che non abbiate giù utilizzato GitHub in precedenza e abbiate già creato uno o più repository, tale schermata sarà vuota. Ora collegatevi al sito di GitHub, nello specifico al repositoriy del progetto sqlite-net-wp8, che è disponibile all’indirizzo https://github.com/peterhuene/sqlite-net-wp8. In cima alla pagina troverete il pulsante Clone in Windows: cliccateci sopra, assicurandovi di aver già fatto login sul portale con le stesse credenziali che avete utilizzato nell’applicazione.
A questo punto sarà nuovamente aperto il client GitHub for Windows and il repository sarà automaticamente aggiunto all’elenco dei vostri repository locali: dopo un po’ (la progress bar vi mostrerà lo stato dell’operazione) l’intero repository sarà clonato in locale sul vostro computer, all’interno della cartella C:\Users\User\Documents\GitHub (dove User è il vostro nome utente di Windows). Questa è la cartella in cui il tool posiziona tutti i repository locali: di conseguenza, ne troverete una chiamata sqlite-net-wp8, che contiene il progetto che dovrete aggiungere alla vostra soluzione.
Dato che stiamo già utilizzando GitHub, cogliamo l’occasione per scaricare anche il fork di sqlite-net compatibile con Windows Phone 8: dovete semplicemente le operazioni che abbiamo appena fatto sul repository https://github.com/peterhuene/sqlite-net.
L’ultimo requisito indispensabile è di installare, tramite la Visual Studio Gallery, il SQLite Runtime for Windows Phone, disponibile al seguente indirizzo: http://visualstudiogallery.msdn.microsoft.com/cd120b42-30f4-446e-8287-45387a4f40b7
Ora abbiamo tutto quello che ci serve, possiamo iniziare a lavorare sull’applicazione Windows Phone 8.
Utilizziamo SQLite
La prima cosa da fare è aprire Visual Studio 2012 e creare un’applicazione per Windows Phone 8. A questo punto dovete aggiungere alla soluzione la libreria sqlite-net-wp8 che abbiamo scaricato da GitHub: fate clic con il tasto destro sulla soluzione, selezionate Add existing project e cercate il file Sqlite.vcxproj nella cartella sqlite-net-wp8 folder che è stata scaricata in precedenza. Vedrete comparire il nuovo progetto in Solution Explorer: potete notare che ha un’icona differenta da quella del progetto Windows Phone, dato che la libreria è scritta in codice nativo.
Come spiegato in precedenza, si tratta semplicemente di un wrapper per alcune delle funzionalità utilizzate da sqlite-net: dobbiamo perciò aggiungere la libreria sqlite-net vera e proprio, semplicemente copiando i file Sqlite.cs e SqliteAsync.cs contenuti all’interno della cartella src del repository locale che abbiamo scaricato in precedenza all’interno del nostro progetto. Per farlo, è sufficiente fare click con il tasto destro sul progetto Windows Phone e scegliere Add existing item.
L’ultimo stpe necessario è aggiungere, al nostro progetto Windows Phone, una reference sia al wrapper sqlite-net-wp8 sia all’engine vero e proprio di SQLite. Per farlo fate clic con il tasto destro sul progetto, scegliete Add Reference e cercate:
- Nel tab Solution, la libreria sqlite
- Nel tab Windows Phone – Extensions, la libreria SQLite for Windows Phone
AGGIORNAMENTO: in seguito ad una modifica da parte dello sviluppatore per continuare a supportare anche il porting in C# dell’engine di SQLite, è necessario uno step aggiuntivo per poter usare l’engine nativo: occorre aggiungere un simbolo condizionale tra le impostazioni di build del progetto. Per farlo, fate click con il tasto destro sul vostro progetto (quello che contiene i file Sqlite.cs e SqliteAsync.cs aggiunti in precedenza), scegliete Properties, andate nella sezione Build e, nella casella Conditional compilation symbols, aggiungete alla fine della riga il valore USE_WP8_NATIVE_SQLITE. Nel caso di un progetto standard per Windows Phone 8 il contenuto della casella di test sarà:
SILVERLIGHT;WINDOWS_PHONE;USE_WP8_NATIVE_SQLITE
A questo punto possiamo riutilizzare il codice che abbiamo già visto negli altri post dedicati a sqlite-net: il codice necessario per interagire con il database e creare e leggere dati sarà esattamente lo stesso. Ecco alcuni esempi per effetuare le operazioni più comuni:
//creo il database private async void CreateDatabase() { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("people.sql"); await conn.CreateTableAsync<Person>(); } //inserisco dei dati nel database private async void Button_Click_1(object sender, RoutedEventArgs e) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("people.sql"); Person person = new Person { Name = "Matteo", Surname = "Pagani" }; await conn.InsertAsync(person); } //leggo i dati memorizzati nel database private async void Button_Click_2(object sender, RoutedEventArgs e) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("people.sql"); var query = conn.Table<Person>().Where(x => x.Name == "Matteo"); var result = await query.ToListAsync(); foreach (var item in result) { Debug.WriteLine(string.Format("{0}: {1} {2}", item.Id, item.Name, item.Surname)); } }
Qualche consiglio per gli acquisti
Ci sono alcune cose da tenere a mente quando si lavora con questa libreria e SQLite. La prima è che, attualmente, nessuna delle librerie che abbiamo visto è disponibile su NuGet: dovrete mantenerle aggiornate utilizzando GitHub for Windows e, periodicamente, effettuare un sync dei repository. La seconda è che la libreria sqlite-net-wp8 è compilata in base ad una specifica versione di SQL Lite: se il team rilasciata un nuovo update tramite l’estensione di Visual Studio, aspettate ad aggiornarla fino a quando lo sviluppatore non avrà aggiornato anche la libreria; in caso contrario, le reference non saranno più valide e non sarete più in grado di aprire il progetto.
Related Content
- Lo speciale di ASPItalia sulle novità per gli sviluppatori di Windows Phone 8 (10/31/2012)
- Windows Phone 8 è finalmente realtà! (10/30/2012)
- Il mio primo articolo cartaceo… con qualche rettifica! (9/5/2012)
- Il libro di ASPItalia sullo sviluppo di applicazioni Windows Phone (6/23/2011)
- Windows Phone Developers Tools Beta (7/13/2010)
- Supportare i dispositivi Windows Phone 8 da un’applicazione Windows Phone 7.x (12/17/2012)
- More related document (277)