Code review - insert obiektowy do bazy danych

0

Czy ten kod jest w porządku?

 public void NewAddList(String name)
    {
        SQLiteDatabase db = getWritableDatabase();
        A list = new A();
        ContentValues values = new ContentValues();
        list.setName(name);
        values.put("name",list.getName() );
        db.insertOrThrow("List",null,values);
        db.close();
        
        

    }

Klasa ma lepszą nazwę, ale zmieniłam jej tu na A. Widziałam różne wariacje na temat obiektowego dodawania danych do bazy. Stworzyłam własną. Czy jest w porządku?

Chciałabym poprawić logikę bazy danych, wszystkie potrzebne funkcje i pożegnać już ten temat.

Mam w sumie trzy tabelki, tyle też różnych funkcji do dodawania np. Dla mnie bardziej przejrzyste jest w tym wypadku: addPokemon i wpisywanie nazwy pola i tabeli na stałe w funkcji, niż pobieranie ich jako argument i użytkowanie z nich. Gdybym miała ze sto różnych podobnych tabelek pewnie by się to zmieniło, ale póki co wolę wersję gdzie od razu po funkcji widzę co robię. Funkcja ma w nazwie New, ponieważ mam inną spełniającą tą funkcje.

Zwracanie obiektu po dodaniu obiektu klasy, wydaje mi się bezsensowne. Dlatego nic nie zwracam. Mam funkcję która sprawdza czy nazwa jest unikalna. Napiszę też kod, który w przypadku braku dodania do bazy danych da znać userowi o tym.

Za nim to jednak uczynię chciałabym wiedzieć czy mój kod jest w porządku.

0

Czemu nazwa metody zaczyna się z wielkiej litery?
Czemu nie używasz ORM ?

0

Co robi klasa A?
Dlaczego nazwa metody z dużej ? exampleMethodName();
Dlaczego "name" i "List" nie są zdefiniowane jako zmienne tylko ad hock?

I mimo wszystko operacja na bazie powinna być w try catch, a close w finally

0

@panryz Zawsze try catch finally dla bazy danych? Znaczy wiesz co mam na myśli... O co Ci chodzi z tymi zmiennymi? Znaczy jak Ty to widzisz? Co masz na myśli? Klasa A to POJO, same gettery i settery.

@karolinaa Mówiąc szczerze to tak jakoś mam że New piszę z dużej... Tak już mam jak piszę Pokemon pikachu = New Pokemon(5,"Rafael"); a potem poprawiam na Pokemon pikachu = new Pokemon(5,"Rafael"); chociaż w sumie lepiej by było dać najpierw imię potem level i ogólnie to jest bezsensu ale to już pomińmy. No bo gdzie mam że np pikachu może razić piorunem? To powinno być klasa pikachu dziedzicząca po pokemon a Rafael obiektem tej klasy.

O ORM slyszałam od kolegi gdy tłukłam się aby to mi w ogóle chodziło. Że czemu nie ORM etc, ale że miałam problem z samą bazą na android to nie brałam od razu ORM-a bo myślałam że ja się dopiero wtedy wkopę. Myślę jednak że teraz mogę z tym się pobawić. Dzięki za uwagę, bo już o tym nawet zapomniałam ;).

Ps Nazywać pliki xml tak samo jak nazwy klasy pod które zostaną podpięte? Stosować "" w nazwach xml? czy tak obok siebie? Rozumiem też że w Javie lepiej nie stotoswać "" w nazwach?

1

co do bazy danych tak. Oprócz tego baza danych powinna mieć jedną instancję, żeby nikt Ci się nie wbił.
Finally to blok który zawsze się wykonuje więc na wszelki wypadek zawsze warto zamknąć połączenie z bazą, żeby nie było wycieków.

Co do nazewnctwa xml. Jako template zawsze jest activiy_main. Można używać tylko [a-z, 0-9, _]

private static final String CONTENT_VALUES_NAME_KEY = "name";

lub w pliku res/string.xml

<string name="content_values_name_key">name</string>

i potem w klasie

contentValues.put(mContext.getString(R.string.content_values_name_key), list.getName());
1

Poza wszystkim co napisali poprzednicy ja bym jeszcze uporządkował kod:

        A list = new A();
        list.setName(name);
        ContentValues values = new ContentValues();
        values.put("name",list.getName() );
        SQLiteDatabase db = getWritableDatabase();
        db.insertOrThrow("List",null,values);
        db.close();

edit:

Anyway, po kiego tutaj jest ta zmienna list? Jeśli list.getName() zwraca to co ustawiliśmy poprzez list.setName(name), to poniższy kod jest równoważny:

        ContentValues values = new ContentValues();
        values.put("name",name);
        SQLiteDatabase db = getWritableDatabase();
        db.insertOrThrow("List",null,values);
        db.close();

1 użytkowników online, w tym zalogowanych: 0, gości: 1