Använda SQLite asynkront

Slutförd

Om du kör frågor på en databas på ett synkront sätt kan det leda till prestandaproblem och appar som inte svarar. SQLite-net har ett asynkront API som du kan använda för att hålla ditt program responsivt.

I den här lektionen får du lära dig hur du använder Asynkront API för SQLite-net för att säkerställa att ditt program förblir mycket dynamiskt.

Förstå asynkrona frågor

Fram tills nu har du kört alla dina databasåtgärder i användargränssnittstråden. Men för att skapa ett mycket dynamiskt mobilprogram vill du göra saker lite annorlunda. Om du kör databasåtgärder i användargränssnittstråden kan det leda till att användargränssnittet fryser om åtgärden tar lång tid att slutföra.

För att lösa det här problemet innehåller SQLite-net ett asynkront API via SQLiteAsyncConnection klassen. Om du till exempel vill skapa en tabell asynkront kan du använda CreateTableAsync metoden:

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

Utföra asynkrona åtgärder med SQLite-net

Klassen SQLiteAsyncConnection exponerar liknande åtgärder som dess synkrona motsvarighet. Åtgärderna är dock alla aktivitetsbaserade för bakgrundsanvändning.

De vanliga tillgängliga asynkrona åtgärderna är:

  • CreateTableAsync: Skapar en tabell baserat på den angivna klassen

  • DropTableAsync: Släpper tabellen som korrelerar med den angivna klassen

  • GetAsync: Hämtar posten i tabellen som korrelerar med den angivna klassen och matchar den primära nyckeln som skickas till konstruktorn

  • InsertAsync: Infogar en ny post med hjälp av objektet som skickas till konstruktorn

  • UpdateAsync: Uppdaterar en befintlig post med hjälp av objektet som skickas till konstruktorn

  • DeleteAsync: Tar bort posten i tabellen som mappar till den angivna klassen och matchar den primära nyckeln som skickas till konstruktorn

  • QueryAsync: Kör en direkt SQL-fråga och returnerar ett objekt

  • ExecuteAsync: Kör en direkt SQL-fråga och returnerar antalet berörda rader

  • ExecuteScalarAsync: Kör en direkt SQL-fråga och returnerar det enskilda resultatet

  • ToListAsync: Kör tabellmetoden asynkront

Följande kod visar ett exempel på hur du använder ToListAsync metoden för att hämta poster asynkront:

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

I det här exemplet ToListAsync hämtar metoden alla användare från databasen asynkront. Om du använder den här metoden förblir användargränssnittet dynamiskt även om det finns en stor uppsättning användare i databasen.