J'ai commencé à utiliser le plugin Xamarin pour Visual Studio pour créer une application Android.
J'ai une base de données SQL locale et je veux l'appeler pour afficher des données. Je ne vois pas comment je peux faire ça. C'est possible?
Après avoir pensé que c'était une chose triviale à faire, je me suis trompé lorsque j'ai essayé de configurer un projet de test rapide. Cette publication contiendra un tutoriel complet sur la configuration d'une base de données pour une application Android dans Xamarin qui sera utile comme référence pour les futurs utilisateurs de Xamarin.
En bref:
Commencez par aller à ce référentiel et téléchargez Sqlite.cs; cela fournit l'API Sqlite que vous pouvez utiliser pour exécuter des requêtes sur votre base de données. Ajoutez le fichier à votre projet en tant que fichier source.
Ensuite, récupérez votre base de données et copiez-la dans le répertoire Assets de votre Android projet, puis importez-la dans votre projet afin qu'elle apparaisse sous les Assets dossier dans votre solution:
J'utilise l'exemple de base de données Chinook_Sqlite.sqlite renommé en db.sqlite à partir de ce site tout au long de cet exemple.
Cliquez avec le bouton droit sur le fichier DB et définissez-le pour générer l'action AndroidAsset
. Cela garantira qu'il est inclus dans le répertoire des ressources de l'APK.
Comme la base de données est incluse en tant qu'actif (inclus dans l'APK), vous devrez l'extraire.
Vous pouvez le faire avec le code suivant:
string dbName = "db.sqlite";
string dbPath = Path.Combine (Android.OS.Environment.ExternalStorageDirectory.ToString (), dbName);
// Check if your DB has already been extracted.
if (!File.Exists(dbPath))
{
using (BinaryReader br = new BinaryReader(Android.App.Application.Context.Assets.Open(dbName)))
{
using (BinaryWriter bw = new BinaryWriter(new FileStream(dbPath, FileMode.Create)))
{
byte[] buffer = new byte[2048];
int len = 0;
while ((len = br.Read(buffer, 0, buffer.Length)) > 0)
{
bw.Write (buffer, 0, len);
}
}
}
}
Cela extrait la base de données sous forme de fichier binaire de l'APK et la place dans le chemin de stockage externe du système. De façon réaliste, la DB peut aller où vous voulez, je viens de choisir de la coller ici.
J'ai également lu que Android a un dossier de bases de données qui stockera directement les bases de données; je ne pouvais pas le faire fonctionner, donc je viens de courir avec cette méthode d'utilisation d'une base de données existante.
Ouvrez maintenant une connexion à la base de données via la classe Sqlite.SqliteConnection:
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
// Do stuff here...
}
Enfin, Sqlite.net étant un ORM, vous pouvez opérer sur la base de données en utilisant vos propres types de données:
public class Album
{
[PrimaryKey, AutoIncrement]
public int AlbumId { get; set; }
public string Title { get; set; }
public int ArtistId { get; set; }
}
// Other code...
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
var cmd = new SQLite.SQLiteCommand (conn);
cmd.CommandText = "select * from Album";
var r = cmd.ExecuteQuery<Album> ();
Console.Write (r);
}
Et voilà comment ajouter une base de données Sqlite existante à votre solution Xamarin pour Android! Pour plus d'informations, consultez les exemples inclus avec la bibliothèque Sqlite.net, ses tests unitaires et les exemples dans la documentation Xamarin.
Voici celui que j'utilise et ça marche
pour des informations plus détaillées, consultez this