SQLite asynchroon gebruiken

Voltooid

Als u query's uitvoert op een database op een synchrone manier, kan dit leiden tot prestatieproblemen en niet-reagerende apps. SQLite-net heeft een asynchrone API die u kunt gebruiken om uw toepassing responsief te houden.

In deze les leert u hoe u de SQLite-net asynchrone API gebruikt om ervoor te zorgen dat uw toepassing zeer responsief blijft.

Asynchrone query's begrijpen

Tot nu toe hebt u al uw databasebewerkingen uitgevoerd op de UI-thread. Als u echter een zeer responsieve mobiele toepassing wilt bouwen, wilt u iets anders doen. Als u databasebewerkingen uitvoert op de UI-thread, kan dit ertoe leiden dat de gebruikersinterface wordt geblokkeerd als het lang duurt voordat de bewerking is voltooid.

Om dit probleem op te lossen, bevat SQLite-net een asynchrone API via de SQLiteAsyncConnection klasse. Als u bijvoorbeeld asynchroon een tabel wilt maken, kunt u de CreateTableAsync methode gebruiken:

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

Asynchrone bewerkingen uitvoeren met SQLite-net

De SQLiteAsyncConnection klasse toont vergelijkbare bewerkingen als de synchrone tegenhanger. De bewerkingen zijn echter allemaal gebaseerd op taken voor achtergrondgebruik.

De algemene beschikbare asynchrone bewerkingen zijn onder andere:

  • CreateTableAsync: Hiermee maakt u een tabel op basis van de aangegeven klasse

  • DropTableAsync: Hiermee wordt de tabel verwijderd die overeenkomt met de aangegeven klasse

  • GetAsync: Haalt de record op in de tabel die overeenkomt met de aangegeven klasse en komt overeen met de primaire sleutel die is doorgegeven aan de constructor

  • InsertAsync: Hiermee wordt een nieuwe record ingevoegd met behulp van het item dat is doorgegeven aan de constructor

  • UpdateAsync: Hiermee wordt een bestaande record bijgewerkt met behulp van het item dat is doorgegeven aan de constructor

  • DeleteAsync: Verwijdert de record in de tabel die is toegewezen aan de aangegeven klasse en komt overeen met de primaire sleutel die is doorgegeven aan de constructor

  • QueryAsync: Voert een directe SQL-query uit en retourneert een object

  • ExecuteAsync: Voert een directe SQL-query uit en retourneert het aantal betrokken rijen

  • ExecuteScalarAsync: Voert een directe SQL-query uit en retourneert het enkelvoudige resultaat

  • ToListAsync: voert de tabelmethode asynchroon uit

In de volgende code ziet u een voorbeeld van hoe u de ToListAsync methode gebruikt om records asynchroon op te halen:

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 dit voorbeeld haalt de ToListAsync methode alle gebruikers asynchroon op uit de database. Als u deze methode gebruikt, blijft uw gebruikersinterface responsief, zelfs als er een grote set gebruikers in de database is.