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 😀
https://gist.github.com/jezinka/45600f5797d9c631aa1f8b74b3a6b521
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 😉
https://gist.github.com/jezinka/26642b495bce6568292df2fffb52c6fa
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 🙂