Ich habe begonnen, das Xamarin-Plugin für Visual Studio zu verwenden, um eine Android App zu erstellen.
Ich habe eine lokale SQL-Datenbank und möchte sie aufrufen, um Daten anzuzeigen. Ich verstehe nicht, wie ich das machen kann. Ist es möglich?
Nachdem ich dachte, dies sei eine triviale Sache, wurde ich als falsch erwiesen, als ich versuchte, ein schnelles Testprojekt einzurichten. Dieser Beitrag enthält eine vollständige Anleitung zum Einrichten einer Datenbank für eine Android App in Xamarin, die als Referenz für zukünftige Xamarin-Benutzer nützlich sein wird.
Auf einen Blick:
Beginnen Sie, indem Sie dieses Repository aufrufen und Sqlite.cs herunterladen. Dadurch wird die SQLite-API bereitgestellt, mit der Sie Abfragen für Ihre Datenbank ausführen können. Fügen Sie die Datei Ihrem Projekt als Quelldatei hinzu.
Als nächstes holen Sie sich Ihre Datenbank und kopieren Sie sie in das Verzeichnis Assets Ihres Android Projektes und importieren Sie sie dann in Ihr Projekt, so dass sie unter den Assets erscheint Ordner in Ihrer Lösung:
Ich verwende das Datenbankbeispiel Chinook_Sqlite.sqlite, das in diesem Beispiel von diese Site in db.sqlite umbenannt wurde.
Klicken Sie mit der rechten Maustaste auf die DB-Datei und legen Sie fest, dass die Aktion AndroidAsset
erstellt wird. Dadurch wird sichergestellt, dass es in das Assets-Verzeichnis der APK aufgenommen wird.
Da die Datenbank als Asset enthalten ist (in der APK enthalten), müssen Sie sie extrahieren.
Sie können dies mit dem folgenden Code tun:
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);
}
}
}
}
Dadurch wird die DB als Binärdatei aus dem APK extrahiert und im externen Speicherpfad des Systems abgelegt. Realistisch kann die DB gehen, wohin Sie wollen, ich habe gerade beschlossen, es hier zu kleben.
Ich habe auch gelesen, dass Android einen Datenbankordner hat, in dem Datenbanken direkt gespeichert werden; ich konnte es nicht zum Laufen bringen, also habe ich gerade diese Methode zur Verwendung einer vorhandenen Datenbank ausgeführt.
Öffnen Sie nun über die Sqlite.SqliteConnection-Klasse eine Verbindung zur DB:
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
// Do stuff here...
}
Da Sqlite.net ein ORM ist, können Sie die Datenbank mit Ihren eigenen Datentypen bearbeiten:
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);
}
Und so fügen Sie Ihrer Xamarin-Lösung für Android eine vorhandene SQLite-Datenbank hinzu! Weitere Informationen finden Sie in den Abschnitten Beispiele , die in der Sqlite.net-Bibliothek enthalten sind, Komponententests und Beispiele in der Xamarin-Dokumentation.
Hier ist der, den ich benutze und der funktioniert
weitere Informationen finden Sie unter this