Cela faisait longtemps que je n’avais pas publié quelque chose ! Alors aujourd’hui je vous propose de voir comment utiliser SQLite via une PCL le tout mixé avec XAMARIN pour ensuite pouvoir utiliser SQLite sur Android 🙂 J’en ai perdu combien là ?
Tout d’abord on va utiliser notre IDE préféré Visual Studio 2013. Ca marche aussi avec 2012 mais pour 2012 vous aurez sûrement besoin de ceci (pour éviter un File Not Found)
Il s’agit d’une extension visual studio (disponible dans Tools > Extentions and Updates)
Nous allons maintenant créer notre projet dans un solution blanche (ex : SQLite.PCL, ok y’a mieux).
Projet Portable Class Libray
Ajoutons notre projet “Portable Class Library” SQLite.PCL.
Supprimer le fichier MyClass.
On va créer un dosier DAL (Data Access Layer) avec un fichier DataBaseAcces.cs : ce fichier contiendra notre accès à notre base de données et les différentes méthodes pour ajouter supprimer … des données.
On va créer un dossier “Model” dans lequel on ajoutera un fichier Stock.cs.
Pour pouvoir utiliser SQLite il faudra ajouter le package NuGet suivant :
Maintenant on va pouvoir commencer à coder 🙂
D’abord notre model :
[Table("Items")]
public class Stock {
[PrimaryKey, AutoIncrement, Column("_id")]
public int Id { get; set; }
[MaxLength(8)]
public string Symbol { get; set; }
}
J’ai juste repris ce qu’il y avait sur la doc nokia dev (http://developer.xamarin.com/guides/cross-platform/application_fundamentals/data/part_3_using_sqlite_orm/)
En fait on aura une table Items ici représentée par notre class Stock.
Ensuite notre DataBaseAccess.cs :
Ici on va faire quelque chose de simple, le but de ce billet est simplement de montrer la création d’une bdd Sqlite et son accès.
private SQLiteConnection _db;
public DataBaseAccess()
{
}
public void CreateDataBase(ISQLitePlatform plateform, string dbPath)
{
_db = new SQLiteConnection(plateform, dbPath);
_db.CreateTable<Stock>();
_db.Insert(new Stock { Symbol = "Test" });
_db.Commit();
}
public TableQuery<Stock> GetDataStock()
{
return _db.Table<Stock>();
}
Voilà notre PCL est prête.
Client Windows Phone 8
Pour notre client Windows Phone 8, on va devoir ajouter un nouveau projet, référencer notre PCL et ajouter les packages NuGet suivants :
Vous devrez aussi avoir du x86 en plateforme pour le simulateur ou ARM pour votre device. Le any cpu n’étant pas supporté.
string dbPath = Path.Combine(Path.Combine(ApplicationData.Current.LocalFolder.Path, "sample.sqlite"));
DataBaseAccess dbAccess = new DataBaseAccess();
dbAccess.CreateDataBase(new SQLitePlatformWP8(), dbPath);
var items = dbAccess.GetDataStock();
Une erreur File Not Found peut apparaître lors de déploiement, pour cela il faut ajouter la référence qui provient de l’extension 🙂
Ou éditez le csprojet et ajoutez ceci :
<ItemGroup>
<SDKReference Include="SQLite.WP80, Version=3.8.4.3">
<Name>SQLite for Windows Phone</Name>
</SDKReference>
</ItemGroup>
Maintenant si tout se passe bien vous devriez avoir du monde dans “items”.
Client Android (Xamarin)
Pour Androïd ce sera quasiment la même chose. On ajoute notre projet, on référence notre PCL et on ajoute les packages NuGet suivants :
string dbPath = Path.Combine (
System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal),
"sample.sqlite");
DataBaseAccess dbAccess = new DataBaseAccess ();
dbAccess.CreateDataBase (new SQLitePlatformAndroid (), dbPath);
var items = dbAccess.GetDataStock ();
Si tout se passe bien vous devriez avoir du monde dans “items”.
On aura pu mettre le nom du fichier dans notre PCL et simplement indiquer le folder suivant la plateforme et gérer un close lorsque l’on a terminé nos transactions.
J’espère que ce billet vous aura aider dans la mise en place de SQLite sur vos plateformes mobiles.
A bientôt.