Asynchrones Verwenden von SQLite
Wenn Sie Abfragen in einer Datenbank synchron ausführen, kann es zu Leistungsproblemen und nicht reagierenden Apps kommen. SQLite-net enthält eine asynchrone API, über die Sie die Reaktionsfähigkeit Ihrer Anwendung aufrechterhalten können.
In dieser Lerneinheit erfahren Sie, wie Sie mithilfe der asynchronen API von SQLite-net sicherstellen können, dass Ihre Anwendung jederzeit hochgradig reaktionsfähig ist.
Grundlagen zu asynchronen Abfragen
Bis zu diesem Punkt haben Sie alle Datenbankvorgänge im UI-Thread ausgeführt. Wenn Sie eine hochgradig reaktionsfähige mobile Anwendung erstellen möchten, müssen Sie jedoch etwas anders vorgehen. Das Ausführen von Datenbankvorgängen im Thread der Benutzeroberfläche kann dazu führen, dass die Benutzeroberfläche einfriert, wenn das Abschließen des Vorgangs zu lang dauert.
Um dieses Problem zu lösen, enthält SQLite-net eine asynchrone API über die SQLiteAsyncConnection
-Klasse. Zum asynchronen Erstellen einer Tabelle können Sie beispielsweise die CreateTableAsync
-Methode verwenden:
var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();
Ausführen von asynchronen Vorgängen mit SQLite-net
Die SQLiteAsyncConnection
-Klasse macht ähnliche Vorgänge als synchrones Gegenstück verfügbar. Allerdings sind alle Vorgänge für die Hintergrundnutzung aufgabenbasiert.
Zu den allgemeinen asynchronen Vorgängen gehören folgende:
CreateTableAsync
: Erstellt eine Tabelle basierend auf der angegebenen Klasse.DropTableAsync
: Löscht die Tabelle, die mit der angegebenen Klasse korreliert.GetAsync
: Ruft den Datensatz in der Tabelle ab, die mit der angegebenen Klasse korreliert, und gleicht den Primärschlüssel ab, der an den Konstruktor übergeben wirdInsertAsync
: Fügt einen neuen Datensatz unter Verwendung des Elements ein, das an den Konstruktor übergeben wirdUpdateAsync
: Aktualisiert einen vorhandenen Datensatz unter Verwendung des Elements ein, das an den Konstruktor übergeben wirdDeleteAsync
: Löscht den Datensatz in der Tabelle, die der angegebenen Klasse zugeordnet ist, und gleicht den Primärschlüssel ab, der an den Konstruktor übergeben wirdQueryAsync
: Führt eine direkte SQL-Abfrage durch und gibt ein Objekt zurück.ExecuteAsync
: Führt eine direkte SQL-Abfrage durch und gibt die Anzahl von betroffenen Zeilen zurückExecuteScalarAsync
: Führt eine direkte SQL-Abfrage durch und gibt das einzelne Ergebnis zurück.ToListAsync
: Führt die Table-Methode asynchron aus
Es folgt ein Beispiel für die Verwendung der ToListAsync
-Methode, um Datensätze asynchron abzurufen:
SQLiteAsyncConnection conn;
ObservableCollection<User> userList; // Bound to UI
...
public async Task AddAllUsersAsync()
{
List<User> users = await conn.Table<User>().ToListAsync();
// Must be on UI thread here!
foreach (var u in users)
userList.Add(u);
}
In diesem Beispiel werden alle Benutzer mithilfe der ToListAsync
-Methode asynchron aus der Datenbank abgerufen. Bei Verwendung dieser Methode bleibt Ihre Benutzeroberfläche selbst dann reaktionsfähig, wenn die Datenbank eine große Gruppe von Benutzern enthält.