Asynchronicznie używaj narzędzia SQLite

Ukończone

Jeśli uruchamiasz zapytania w bazie danych w sposób synchroniczny, może to prowadzić do problemów z wydajnością i nie odpowiadania aplikacji. SqLite-net ma asynchroniczny interfejs API, którego można użyć do zapewnienia dynamicznego reagowania aplikacji.

W tej lekcji dowiesz się, jak korzystać z asynchronicznego interfejsu API SQLite-net w celu zapewnienia, że aplikacja pozostaje bardzo elastyczna.

Omówienie zapytań asynchronicznych

Do tego momentu wykonano wszystkie operacje bazy danych w wątku interfejsu użytkownika. Jednak aby utworzyć bardzo elastyczną aplikację mobilną, chcesz zrobić coś nieco inaczej. Jeśli uruchamiasz operacje bazy danych w wątku interfejsu użytkownika, może to spowodować zablokowanie interfejsu użytkownika, jeśli operacja trwa długo.

Aby rozwiązać ten problem, sqLite-net zawiera asynchroniczny interfejs API za pośrednictwem SQLiteAsyncConnection klasy . Aby na przykład utworzyć tabelę asynchronicznie, można użyć CreateTableAsync metody :

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

Wykonywanie operacji asynchronicznych za pomocą narzędzia SQLite-net

Klasa SQLiteAsyncConnection uwidacznia podobne operacje jako synchroniczny odpowiednik. Jednak operacje są oparte na zadaniach na potrzeby użycia w tle.

Typowe dostępne operacje asynchroniczne obejmują:

  • CreateTableAsync: Tworzy tabelę na podstawie wskazanej klasy

  • DropTableAsync: Usuwa tabelę, która jest skorelowana ze wskazaną klasą

  • GetAsync: Pobiera rekord w tabeli, który jest skorelowany z wskazaną klasą i pasuje do klucza podstawowego przekazanego do konstruktora

  • InsertAsync: Wstawia nowy rekord przy użyciu elementu przekazanego do konstruktora

  • UpdateAsync: aktualizuje istniejący rekord przy użyciu elementu przekazanego do konstruktora

  • DeleteAsync: Usuwa rekord w tabeli, który jest mapowany na wskazaną klasę i pasuje do klucza podstawowego przekazanego do konstruktora

  • QueryAsync: Uruchamia bezpośrednie zapytanie SQL i zwraca obiekt

  • ExecuteAsync: Uruchamia bezpośrednie zapytanie SQL i zwraca liczbę wierszy, których dotyczy problem

  • ExecuteScalarAsync: uruchamia bezpośrednie zapytanie SQL i zwraca pojedynczy wynik

  • ToListAsync: wykonuje metodę Table asynchronicznie

Poniższy kod przedstawia przykład użycia ToListAsync metody do asynchronicznego pobierania rekordów:

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

W tym przykładzie ToListAsync metoda pobiera wszystkich użytkowników z bazy danych asynchronicznie. Jeśli używasz tej metody, interfejs użytkownika pozostaje dynamiczny, nawet jeśli w bazie danych znajduje się duży zestaw użytkowników.