SQL "ID" lekérdezés

0 értékelés
44 megtekintés
suti1979 (23 pont) kérdezte Feb 14.
Alapvetően a JavaFX középhaladó videókurzusból kérdés, de megpróbálom általánosságban leírni:

Forrás itt, ami kísértetiesen hasonló az eredetihez, csak van benne ID oszlop, amit hoz is szépen alapból. Illetve localhost-on működik.

https://github.com/suti1979/phonebook/blob/master/src/phonebook/ViewController.java

Rögzítünk beviteli mezőből DB táblába addContact().

Szeretném, ha rögzítés után az ID mezőt is kiírná az FXML tábla. (Ami ugyebár AUTO_INCREMENT, tehát nem kell megadni a Person objektum és a táblába való íráskor sem.)

Szerintem hiányzik a fejemből egy logikai elem, hogy hogy tudnám a DB getId()-t vagy valamit használni, hogy rögzítés után látható legyen az ID is az oszlopában.

Remélem értelmesen írtam le a problémát...

Előre is köszi.

1 Válasz

0 értékelés
Gergely1987 (40 pont) válaszolta meg Feb 14.
suti1979 kiválasztva Feb 16.
 
Legjobb válasz

hali!

szerintem a kódodban majdnem minden szerepel, csak a hozzáadás után nem frissíted le a táblát az adatbázisból, hanem csak a hozzáadást végzed el (ugye az ID-t azt az adatbázisból kapnád vissza, amihez kell egy lekérdezés az adatbázisból, hogy hozzáférj)

én annyit csináltam, hogy a setTableData(); -t meghívtam az addContact() metódus legvégén, ezzel az adatbázisból újratölti a táblát minden egyes hozzáadásnál, azonban annyi a hiba vele, hogy folyamatosan hozzáaadja az oszlopokat és a sorokat is újra meg újra, ezért a setTableData() metódusban meghívom a table.getColumns().clear()-t és a table.getItems().clear()-t a table.getColumns().addAll előtt, és így működni is fog a programod, mert minden egyes Hozzáadásnál csinálsz egy hozzáadást és egy adatbázis lekérdezést is.

@FXML
public void addNewContactButton(ActionEvent event) {
    String email = inputEmail.getText();
    if (email.length() > 3 && email.contains("@") && email.contains(".")) {
        Person newPerson = new Person(inputLastName.getText(), inputFirstName.getText(), inputEmail.getText());
        data.add(newPerson);
        db.addContact(newPerson);
        inputFirstName.clear();//ne maradjon a beírt szöveg a textfieldben
        inputLastName.clear();
        inputEmail.clear();
    } else {
        System.out.println("hiba a felvételnél");
        alert("hibásan töltötted ki az emailt");
    }
    setTableData();
}
private void setTableData() {..... 
table.getColumns().clear();
table.getItems().clear();
table.getColumns().addAll(idCol,lastNameCol, firstNameCol, emailCol,removeCol); //táblához hozzá adom az oszlopokat
data.addAll(db.getAllContacts());
table.setItems(data);  //ráküldöm az adatokat a táblára

biztos van szebb módja :) én írtam egy kis készletkezelőt, és ott mindent így csináltam (bár ez bazi nagy adatbázisoknál tutira nem jó.... mert ****** sok adatot kellene újratölteni, de itt működik jól)

suti1979 (23 pont) szólt hozzá Feb 15.
Először is köszönöm szépen, működik. :) Ha megengeded még 1-2 napig nem jelölöm be megoldásnak hátha van még valakinek más jellegű ötlete, pontosan amiatt amit írtál, hogy nagyobb adattáblánál luxus állandóan újra építeni... de ha nem lesz, akkor tiéd az érdem.  ;)
Köszönöm.
Gergely1987 (40 pont) szólt hozzá Feb 16.
amúgy én is kíváncsi lennék, hogy mi lenne ettől szebb megoldás, mint újra+ újra lehúzni az egész listát, én arra gondoltam, hogy csinálsz egy olyan lekérdezést ami csak az utolsó elemet adja vissza ami hozzá lett adva az adatbázishoz és azt beszúrod a táblába és nem frissíted újra az egészet a setTAbleData()-val
így csak 1 adatot mozgatsz és nem 1 egész adatbázist
...