NetBeans i formularz danych dla MySQL

0

Chciałbym zrealizować formularze dla danych zapisanych w bazie MySQL w Javie.

Dla każdej z tabel napisałem publiczną klasę która odwzorowuje strukturę tej tabeli i innych z modelu relacyjnego np.

public class KierowcaTbl {
    int IDK;
    String Imie;
    String Imie2;
    String Nazwisko;
    String Ulica;
    String Numer;
    // pozostałe pola
    KierowcaTbl(){
        IDK=0;
        Imie="";
        Imie2="";
        Nazwisko="";
        Ulica="";
        Numer="";
    //pozostałe pola
    }
}

Formularz pobiera dane z tabel przez funkcję zwracającą obiekt właściwej klasy np.

public static KierowcaTbl selKierowca(int numer) {
        KierowcaTbl k = new KierowcaTbl();
        try {
              Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception ex) {       }
        Connection conn = null;
        try {
            conn = DriverManager.getConnection("" +
                    "jdbc:mysql://localhost/kierowcy?" + "user=***&password=***");
        Statement s = null;
        ResultSet rs = null;
        try {
                String Zapytanie="SELECT * FROM (kierowcy k inner join miasta m on " + 
                "k.idm=m.idm) inner join panstwa p on p.idp=m.idp LIMIT " + (numer-1) + ", 1";
                s = conn.createStatement ();
                s.executeQuery (Zapytanie);
                rs = s.getResultSet ();
               while (rs.next ()){
                    k.IDK = rs.getInt("IDK");
                    k.Imie = rs.getString ("Imie");
                    k.Imie2 = rs.getString("Imie2");
                    k.Nazwisko = rs.getString ("Nazwisko");
                    k.Ulica=rs.getString("Ulica");
                    //pozostałe pola
                }
            }
            finally {
                if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException sqlEx) { }
                rs = null;
                }  
                 if (s != null) {
                try {
                    s.close();
                } catch (SQLException sqlEx) { }
                    s = null;
                }
             }
            }
          }
        }
         catch (SQLException ex) {
        } 
    return k;
    }

To rozwiązanie działa, ma jednak wadę taką, że w wyniku mam mnóstwo klas, funkcji z których każda łączy się z bazą itp. a później rozłącza się.

Czy ktoś mógłby wypowiedzieć się na temat w jaki bardziej elegancki sposób należy tworzyć formularze do baz danych w Javie. Czy może to coś co napisałem (wątpię...) jest poprawne?

0

Po pierwsze ta funkcja zwraca ci tylko ostatni wiersz z tabeli, bo poprzednie zostają nadpisane ;) Pierwszą klasę zrób z polami private i z metodami dostępowymi do nich. A druga funkcja niech zwraca ArrayList<KierowcaTbl> i w pętli:

while (rs.next ()){
}

twórz obiekty KierowcaTbl i dodawaj je do ArrayList :)

0

Poczytaj również o metodzie

prepareStatement()

ułatwi Ci to wykonywanie kwerend.

0
kaziuuu napisał(a)

Po pierwsze ta funkcja zwraca ci tylko ostatni wiersz z tabeli, bo poprzednie zostają nadpisane ;)

Kwerenda jest tak skonstruowana, że zwraca zawsze tylko jeden rekord, nie wiem jak w Javie zapytać w inny sposób niż przez "while (rs.next)".

kaziuuu napisał(a)

Pierwszą klasę zrób z polami private i z metodami dostępowymi do nich. A druga funkcja niech zwraca ArrayList<KierowcaTbl> i w pętli:

while (rs.next ()){
}

twórz obiekty KierowcaTbl i dodawaj je do ArrayList :)

Super, dzięki za podpowiedź, bo miałem zabrać się za obrabianie kwerend do raportów a tam będę miał więcej niż jeden rekord w wyniku kwerendy.

0
qba7878 napisał(a)

Poczytaj również o metodzie

prepareStatement()

ułatwi Ci to wykonywanie kwerend.

Rozumiem, że chodzi o tworzenie i wykonywanie kwerend parametrycznych?
Coś typu:

Query query = em
            .createQuery("SELECT Imie, Nazwisko FROM Kierowcy LIMIT :nr, 1");
query.setParameter(":nr", "1");
0
radziun napisał(a)
qba7878 napisał(a)

Poczytaj również o metodzie

prepareStatement()

ułatwi Ci to wykonywanie kwerend.

Rozumiem, że chodzi o tworzenie i wykonywanie kwerend parametrycznych?
Coś typu:

Query query = em
            .createQuery("SELECT Imie, Nazwisko FROM Kierowcy LIMIT :nr, 1");
query.setParameter(":nr", "1");

Generalnie tak, aczkolwiek składnia jest niepoprawna. W samej kwerendzie powinieneś wstawiać znaki zapytania, a później przypisywać im wartości przy pomocy metod

setInt()
setString()
...itd.

Naprawdę dużo jest o tym w necie. Poszukaj na google, ja na szybko znalazłem to:
http://ranisz.kis.p.lodz.pl/JSI/jsi_5.pdf

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