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 😀
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 😉
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import static android.database.DatabaseUtils.queryNumEntries; | |
public boolean isAnyMealSaved(SQLiteOpenHelper helper) { | |
SQLiteDatabase db = helper.getReadableDatabase(); | |
return queryNumEntries(db, "meal") > 0; | |
} |
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?
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 🙂
no dobra, im dłużej patrzę w ten kod, tym bardziej przyznaję Ci rację – NumEntries jest wystarczająco opisowe żeby zastąpić counta 🙂