policzmy rekordy – DatabaseUtils.queryNumEntries – #06

Wymyśliłam sobie, że w momencie kiedy użytkownik po raz pierwszy wchodzi do aplikacji, to zostaje wysłane sprawdzenie, czy w tabelce, w której mamy zapisane posiłki już coś jest. Mogłam to zrobić jak wcześniej już: pisząc natywne query, tworzyć kursor i wyciągnąć z niego wartość, ale przecież to nie powinno być tak! Powinien być bardziej elegancki sposób wyciągnięcia takiej informacji. Po krótkim odpytaniu google’a jak można to zrobić wypluło mi klasę DatabaseUtils, z której jeszcze nie korzystałam i okazało się, że można to zrobić ładniej, piękniej, mniej nachalnie 😀


public boolean isAnyMealSaved(SQLiteOpenHelper sqLiteOpenHelper) {
SQLiteDatabase db = sqLiteOpenHelper.getReadableDatabase();
long count = DatabaseUtils.queryNumEntries(db, "meal");
return count > 0;
}

Metoda queryNumEntries w najprostszym wywołaniu przyjmuje 2 parametry – bazę danych i nazwę tabelki, a zwraca liczbę wierszy.

Wersja bardziej wypasiona – 3 parametrowa:

DatabaseUtils.queryNumEntries(db, "meal", "name like 'p%'");

Przemycamy w trzecim parametrze to co wrzucilibyśmy w warunek where w tym wypadku mówimy: policz mi wszystkie rekordy z tabeli meal, których nazwa zaczyna się na literę ‚p’.

Wersja pro – na 4 parametry:

DatabaseUtils.queryNumEntries(db, "meal", "name = ? or name = ?", new String[]{"pizza", "pesto"});

możemy zamiast wartości parametrów podać ? i w tablicy Stringów przekazać wartości, których szukamy. Przykład – zlicz te rekordy w tabelce, których nazwa to pesto lub pizza.

Coś czuję, że przyda mi się to do statystyk, ale może do tego czasu odkryję coś nowego 🙂

Po zasugerowanym i konstruktywnym feedbacku funkcja prezentuje się następująco 😉


import static android.database.DatabaseUtils.queryNumEntries;
public boolean isAnyMealSaved(SQLiteOpenHelper helper) {
SQLiteDatabase db = helper.getReadableDatabase();
return queryNumEntries(db, "meal") > 0;
}

3 uwagi do wpisu “policzmy rekordy – DatabaseUtils.queryNumEntries – #06

  1. Patrząc na tą funkcję, mam ochotę ją nieco zrefaktorować, aby była bardziej zwięzła 😉

    Osobiście bym nie nazywał parametru sqLiteOpenHelper, ale po prostu helper.
    Poza tym zaimportowałbym statycznie metodę queryNumEntries, w wyniku czego można by napisać po prostu:

    SQLiteDatabase db = helper.getReadableDatabase();
    return queryNumEntries(db, „meal”) > 0;

    Co o tym myślisz?

    Polubienie

  2. nie zawsze trzeba zwięźle, chociaż jednolinijkowce w Pythonie dobrze się czyta 😉
    Co do nazwy -> helper byłoby ok, to w sumie krótka metoda, innego helpera nie planujemy, statyczny import też super, ale zmienną count zostawiam, bo lubię wiedzieć co to miało zwrócić 🙂
    Zaraz dorzucę do postu trochę refaktoringu 🙂

    Polubienie

    • no dobra, im dłużej patrzę w ten kod, tym bardziej przyznaję Ci rację – NumEntries jest wystarczająco opisowe żeby zastąpić counta 🙂

      Polubienie

Skomentuj

Proszę zalogować się jedną z tych metod aby dodawać swoje komentarze:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s

Ta witryna wykorzystuje usługę Akismet aby zredukować ilość spamu. Dowiedz się w jaki sposób dane w twoich komentarzach są przetwarzane.