sqlite in xamarin.forms

27
Creare app native su iOS, Android, Mac & Windows in C# Guido Magrin Xamarin Student Ambassador @GuidoMagrin

Upload: guido-magrin

Post on 12-Aug-2015

164 views

Category:

Software


6 download

TRANSCRIPT

Page 1: SQLite in Xamarin.Forms

Creare app native su iOS, Android, Mac & Windows in C#

Guido MagrinXamarin Student Ambassador@GuidoMagrin

Page 2: SQLite in Xamarin.Forms

Gli Xamarin Student Ambassadors

https://www.facebook.com/XSAMilano

Page 3: SQLite in Xamarin.Forms

Oggi parleremo di…

Local Storage

Page 4: SQLite in Xamarin.Forms

Cosa impareremo oggi?

• Conoscere il mondo dei Database• Realizzare query• Implementare SQLite in un’app

Xamarin.Forms

Page 5: SQLite in Xamarin.Forms

Quando NON usare un Database

• Impostazioni utente• File di testo• File di dati serializzati (XML, JSON)• Immagini

Per tutte queste esigenze, conviene usare il file-system o metodi propri della piattaforma usata (iCloud, OneDrive, etc)

Page 6: SQLite in Xamarin.Forms

Quando usare un Database

Più in generale, tutte le volte che ho bisogno di archiviare dati che poi posso voler trasmettere online, tramite per esempio i Mobile Services di Microsoft Azure.

• Database

Page 7: SQLite in Xamarin.Forms

Ma...

...cos’è esattamenteun database?

Page 8: SQLite in Xamarin.Forms

Introduzione ai database

• Un database è una struttura in grado di memorizzare dati in maniera ordinata.

• Sui dati memorizzati in un database posso effetturare query per leggerli o manipolarli in un qualsiasi modo.

• Il database mette a dispozione strumenti per garantire l’integrità e la coerenza dei dati memorizzati al suo interno.

Page 9: SQLite in Xamarin.Forms

Le tabelle

• I dati vengono memorizzati in tabelle.

• Ogni riga della tabella (detta n-pla) è univocamente identificata da un attributo univoco, chiamato chiave primaria.

Page 10: SQLite in Xamarin.Forms

Le query

• Le query servono ad interagire con le tabelle• Con una query posso:

– visualizzare dati di una tabella, filtrandoli secondo certi criteri– aggiungere dati ad una tabella– modificare dati in una tabella– eliminare dati da una tabella– incrociare dati tra tabelle (metodi di “join”)– creare una nuova tabella

Page 11: SQLite in Xamarin.Forms

La prima query

SELECT [selezione verticale]FROM [nome tabella]WHERE [selezione orizzontale] LIKE [parametro];

Page 12: SQLite in Xamarin.Forms

Esempi di query

SELECT *FROM Voti;

SELECT *FROM VotiWHERE Matricola=“803012”;

SELECT *FROM VotiWHERE MatricolaLIKE ‘%2’;

SELECT *FROM VotiWHERE MatricolaNOT LIKE ‘%2’

Page 13: SQLite in Xamarin.Forms

Esempi di query

DEMO

Page 14: SQLite in Xamarin.Forms

SQLite - Introduzione

• Database open-source adottato da Google, Apple e Microsoft

• SQLite è leggero, veloce e facilmente trasportabile• Il database viene memorizzato in un singolo file

Pagina ufficiale del progetto: http://sqlite.org/

Page 15: SQLite in Xamarin.Forms

SQLite - Limitazioni

• Alcuni tipi di sintassi avanzate non sono supportati (per esempio il tipo di dato “Long”)

• Gli unici comandi disponibili per alterare le tabelle sono RENAME e ADDCOLUMN

• Le “Viste” sono accessibili solo in lettura

Per tutte le altre limitazioni:http://sqlite.org/limits.html

Page 16: SQLite in Xamarin.Forms

SQLite – Creazione del Database in una PCL Xamarin.Forms

Prima di tutto, bisogna aggiungere il pacchetto NuGet ad ogni progetto della soluzione:

https://www.nuget.org/packages/sqlite-net-pcl/

Page 17: SQLite in Xamarin.Forms

SQLite – Creazione della tabella

La tabella in SQLite viene gestita da una classe (NomeTabella.cs).

public class Person{ [PrimaryKey, AutoIncrement] public int ID { get; }

public string FirstName { get; set; }

public string LastName { get; set; }

[MaxLength(3)] public int Age { get; set; }}

Page 18: SQLite in Xamarin.Forms

SQLite – Override dei metodi di default

E’ possibile fare un override dei metodi di default, proprio come in C#, sulle tabelle usate:

public class Person{

[...]public override string ToString()

{ return string.Format("[Person: ID={0}, FirstName={1}, LastName={2}]", ID, FirstName, LastName); }}

Page 19: SQLite in Xamarin.Forms

SQLite – Colleghiamoci al Database (Portable)

public interface ISQLite { SQLiteConnection GetConnection();}

Bisogna creare un file di interfaccia da estendere poi per ogni piattaforma:

E ora vediamo come implementare l’interfaccia su ogni piattaforma!

Page 20: SQLite in Xamarin.Forms

SQLite – Colleghiamoci al Database (iOS)

[assembly: Dependency (typeof (SQLite_iOS))]

public class SQLite_iOS : ISQLite {public SQLite_iOS () {}public SQLite.SQLiteConnection GetConnection (){ var sqliteFilename = "TodoSQLite.db3"; string documentsPath = Environment.GetFolderPath (Environment.SpecialFolder.Personal); string libraryPath = Path.Combine (documentsPath, "..", "Library"); // Library folder var path = Path.Combine(libraryPath, sqliteFilename); // Create the connection var conn = new SQLite.SQLiteConnection(path); // Return the database connection return conn;}}

Page 21: SQLite in Xamarin.Forms

SQLite – Colleghiamoci al Database (Android)

[assembly: Dependency (typeof (SQLite_Android))]

public class SQLite_Android : ISQLite {public SQLite_Android () {}public SQLite.SQLiteConnection GetConnection () { var sqliteFilename = "TodoSQLite.db3"; string documentsPath = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); var path = Path.Combine(documentsPath, sqliteFilename); // Create the connection var conn = new SQLite.SQLiteConnection(path); // Return the database connection return conn;}}

Page 22: SQLite in Xamarin.Forms

SQLite – Colleghiamoci al Database (Windows Phone)

[assembly: Dependency (typeof (SQLite_WinPhone))]

public class SQLite_WinPhone : ISQLite{public SQLite_WinPhone () {}public SQLite.SQLiteConnection GetConnection (){ var sqliteFilename = "TodoSQLite.db3"; string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, sqliteFilename); // Create the connection var conn = new SQLite.SQLiteConnection(path); // Return the database connection return conn;}}

Page 23: SQLite in Xamarin.Forms

SQLite – Connessione e Creazione prima tabella

SQLiteConnection database = DependencyService.Get<ISQLite> ().GetConnection ();

database.CreateTable<Person>();

Ora finalmente potremo collegarci al Database:

E creare la prima tabella, con la struttura Person definite prima:

Page 24: SQLite in Xamarin.Forms

SQLite – Intereragire con i dati nel database

database.Query<Person>("SELECT * FROM [Person] WHERE [Done] = 0");

Query diretta in SQL nel Database appena creato:

(from i in database.Table< Person>() select i).ToList();

database.Table< Person>().FirstOrDefault(x => x.ID == id);

database.Delete< Person>(id);

Approccio offerto da SQLite.NET

Page 25: SQLite in Xamarin.Forms

Implementiamo SQLite

DEMO

Page 26: SQLite in Xamarin.Forms

SQLite – Più informazioni su SQLite in Xamarin

Qui, oltre a rivedere quanto visto nella Demo, è possibile imparare come si implementa SQLite anche in un progetto Shared:

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/databases/

Page 27: SQLite in Xamarin.Forms

Grazie per l’attenzione

Guido MagrinXamarin Student Ambassador

@GuidoMagrin