Asynchrones Verwenden von SQLite

Abgeschlossen

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 wird

  • InsertAsync: Fügt einen neuen Datensatz unter Verwendung des Elements ein, das an den Konstruktor übergeben wird

  • UpdateAsync: Aktualisiert einen vorhandenen Datensatz unter Verwendung des Elements ein, das an den Konstruktor übergeben wird

  • DeleteAsync: 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 wird

  • QueryAsync: 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ück

  • ExecuteScalarAsync: 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.