SlideShare a Scribd company logo
1 of 27
Creare app native su
iOS, Android, Mac &
Windows in C#
Guido Magrin
Xamarin Student Ambassador
@GuidoMagrin
Gli Xamarin Student Ambassadors
https://www.facebook.com/XSAMilano
Oggi parleremo di…
Local Storage
Cosa impareremo oggi?
• Conoscere il mondo dei Database
• Realizzare query
• Implementare SQLite in un’app 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)
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
Ma...
...cos’è esattamente
un database?
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.
Le tabelle
• I dati vengono memorizzati in tabelle.
• Ogni riga della tabella (detta n-pla) è
univocamente identificata da un attributo
univoco, chiamato chiave primaria.
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
La prima query
SELECT [selezione verticale]
FROM [nome tabella]
WHERE [selezione orizzontale] LIKE [parametro];
Esempi di query
SELECT *
FROM Voti;
SELECT *
FROM Voti
WHERE Matricola=“803012”;
SELECT *
FROM Voti
WHERE Matricola
LIKE ‘%2’;
SELECT *
FROM Voti
WHERE Matricola
NOT LIKE ‘%2’
Esempi di query
DEMO
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/
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
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/
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; }
}
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);
}
}
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!
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;
}}
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;
}}
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;
}}
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:
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
Implementiamo SQLite
DEMO
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/
Grazie per l’attenzione
Guido Magrin
Xamarin Student Ambassador
@GuidoMagrin

More Related Content

Similar to SQLite in Xamarin.Forms

Deftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsDeftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsSandro Rossetti
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai frameworkFrancesca1980
 
Lezione 7 del 21 febbraio 2012 - CLOUD STORAGE PER USO PERSONALE
Lezione 7 del 21 febbraio 2012 - CLOUD STORAGE PER USO PERSONALELezione 7 del 21 febbraio 2012 - CLOUD STORAGE PER USO PERSONALE
Lezione 7 del 21 febbraio 2012 - CLOUD STORAGE PER USO PERSONALEGianluigi Cogo
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009Massimiliano Dessì
 
Wp storage (online) - tiziano cacioppolini
Wp   storage (online) - tiziano cacioppoliniWp   storage (online) - tiziano cacioppolini
Wp storage (online) - tiziano cacioppolinimokapp
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansDavide Nardone
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteGiuseppe Toto
 
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...Tsuneo Kurihara
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-serviceMarco Pozzan
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in ActionDotNetMarche
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...azuredayit
 
MySQL Tech Tour 2016 - Database-as-a-Service con MySQL e Oracle Openstack
MySQL Tech Tour 2016 - Database-as-a-Service con MySQL e Oracle OpenstackMySQL Tech Tour 2016 - Database-as-a-Service con MySQL e Oracle Openstack
MySQL Tech Tour 2016 - Database-as-a-Service con MySQL e Oracle OpenstackPar-Tec S.p.A.
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net Leonardo Alario
 

Similar to SQLite in Xamarin.Forms (20)

Deftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsDeftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite Forensics
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai framework
 
Lezione 7 del 21 febbraio 2012 - CLOUD STORAGE PER USO PERSONALE
Lezione 7 del 21 febbraio 2012 - CLOUD STORAGE PER USO PERSONALELezione 7 del 21 febbraio 2012 - CLOUD STORAGE PER USO PERSONALE
Lezione 7 del 21 febbraio 2012 - CLOUD STORAGE PER USO PERSONALE
 
Oracle 1
Oracle 1Oracle 1
Oracle 1
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 
Wp storage (online) - tiziano cacioppolini
Wp   storage (online) - tiziano cacioppoliniWp   storage (online) - tiziano cacioppolini
Wp storage (online) - tiziano cacioppolini
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with Netbeans
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
 
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
 
Dominopoint meet the experts 2015 - XPages
Dominopoint   meet the experts 2015 - XPagesDominopoint   meet the experts 2015 - XPages
Dominopoint meet the experts 2015 - XPages
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
MySQL Tech Tour 2016 - Database-as-a-Service con MySQL e Oracle Openstack
MySQL Tech Tour 2016 - Database-as-a-Service con MySQL e Oracle OpenstackMySQL Tech Tour 2016 - Database-as-a-Service con MySQL e Oracle Openstack
MySQL Tech Tour 2016 - Database-as-a-Service con MySQL e Oracle Openstack
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
couchbase mobile
couchbase mobilecouchbase mobile
couchbase mobile
 

SQLite in Xamarin.Forms

  • 1. Creare app native su iOS, Android, Mac & Windows in C# Guido Magrin Xamarin Student Ambassador @GuidoMagrin
  • 2. Gli Xamarin Student Ambassadors https://www.facebook.com/XSAMilano
  • 4. Cosa impareremo oggi? • Conoscere il mondo dei Database • Realizzare query • Implementare SQLite in un’app Xamarin.Forms
  • 5. 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)
  • 6. 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
  • 8. 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.
  • 9. Le tabelle • I dati vengono memorizzati in tabelle. • Ogni riga della tabella (detta n-pla) è univocamente identificata da un attributo univoco, chiamato chiave primaria.
  • 10. 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
  • 11. La prima query SELECT [selezione verticale] FROM [nome tabella] WHERE [selezione orizzontale] LIKE [parametro];
  • 12. Esempi di query SELECT * FROM Voti; SELECT * FROM Voti WHERE Matricola=“803012”; SELECT * FROM Voti WHERE Matricola LIKE ‘%2’; SELECT * FROM Voti WHERE Matricola NOT LIKE ‘%2’
  • 14. 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/
  • 15. 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
  • 16. 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/
  • 17. 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; } }
  • 18. 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); } }
  • 19. 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!
  • 20. 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; }}
  • 21. 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; }}
  • 22. 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; }}
  • 23. 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:
  • 24. 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
  • 26. 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/
  • 27. Grazie per l’attenzione Guido Magrin Xamarin Student Ambassador @GuidoMagrin

Editor's Notes

  1. Preferences – Both iOS and Android offer a built-in mechanism for storing simple key-value pairs of data. If you are storing simple user settings or small pieces of data (such as personalization information) then use the platform’s native features for storing this type of information. For iOS you can also take advantage of iCloud synchronization for this data, both for backup and synchronization for users with multiple devices. Text Files – User input or caches of downloaded content (eg. HTML) can be stored directly on the file-system. Use an appropriate file-naming convention to help you organize the files and find data. Serialized Data Files – Objects can be persisted as XML or JSON on the file-system. The .NET framework includes libraries that make serializing and de-serializing objects easy. Use appropriate names to organize data files. Image files – Although it’s possible to store binary data in the database on a mobile device, it is recommended that you store them directly in the file-system. If necessary you can store the filenames in a database to associate the image with other data. When dealing with large images, or lots of images, it is good practice to plan a caching strategy that deletes files you no longer need to avoid consuming all the user’s storage space.
  2. http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_like
  3. http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_like