Asynchronní použití SQLite

Dokončeno

Pokud spouštíte dotazy na databázi synchronním způsobem, může to vést k problémům s výkonem a nereagujících aplikacím. SQLite-net má asynchronní rozhraní API, které můžete použít k zachování odezvy aplikace.

V této lekci se dozvíte, jak pomocí asynchronního rozhraní API SQLite-net zajistit, aby vaše aplikace zůstala vysoce responzivní.

Vysvětlení asynchronních dotazů

Až do tohoto okamžiku se vše, co jste udělali, spustilo ve vlákně uživatelského rozhraní. Pokud ale chcete vytvořit vysoce responzivní mobilní aplikaci, chcete dělat věci trochu jinak. Pokud spustíte databázové operace ve vlákně uživatelského rozhraní, může to způsobit zablokování uživatelského rozhraní, pokud dokončení operace trvá dlouhou dobu.

K vyřešení tohoto problému obsahuje SQLite-net asynchronní rozhraní API prostřednictvím SQLiteAsyncConnection třídy. Pokud například chcete vytvořit tabulku asynchronně, můžete použít metodu CreateTableAsync :

var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();

Provádění asynchronních operací pomocí SQLite-net

Třída SQLiteAsyncConnection zveřejňuje podobné operace jako synchronní protějšek. Všechny operace jsou ale založené na úlohách pro použití na pozadí.

Mezi běžné dostupné asynchronní operace patří:

  • CreateTableAsync: Vytvoří tabulku založenou na uvedené třídě.

  • DropTableAsync: Zahodí tabulku, která koreluje s uvedenou třídou.

  • GetAsync: Získá záznam v tabulce, která koreluje s uvedenou třídou, a odpovídá primárnímu klíči, který je předán do konstruktoru.

  • InsertAsync: Vloží nový záznam pomocí položky, která je předána do konstruktoru.

  • UpdateAsync: Aktualizace existující záznam pomocí položky předané do konstruktoru.

  • DeleteAsync: Odstraní záznam v tabulce, která se mapuje na uvedenou třídu, a odpovídá primárnímu klíči předaného do konstruktoru.

  • QueryAsync: Spustí přímý dotaz SQL a vrátí objekt.

  • ExecuteAsync: Spustí přímý dotaz SQL a vrátí počet ovlivněných řádků.

  • ExecuteScalarAsync: Spustí přímý dotaz SQL a vrátí jeden výsledek.

  • ToListAsync: Provede metodu Table asynchronně.

Následující kód ukazuje příklad použití ToListAsync metody k asynchronnímu načtení záznamů:

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);
}

V tomto příkladu metoda ToListAsync načte všechny uživatele z databáze asynchronně. Pokud použijete tuto metodu, uživatelské rozhraní zůstane responzivní i v případě, že databáze obsahuje velkou sadu uživatelů.