[Java] JAVA jList mit Daten aus DB füllen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Bratkartoffl, 5. Juli 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 5. Juli 2009
    JAVA jList mit Daten aus DB füllen

    Hallo RR,

    Ich habe hier ein kleines Problem mit meinem Code an dem ich jetzt schon mehr als 1 Tag hänge.

    Und Zwar will ich eine Tabelle aus meiner mysql DB auslesen und in einer jList darstellen lassen.
    Hierfür betätige ich einen jButton, der dann die folgende Mapper Methode aufruft:

    Code:
    public Vector<Person> getAll () {
     Connection con = DBConnection.connection();
    
     // Ergebnisvektor vorbereiten
     Vector<Person> result = new Vector<Person>();
    
     try{
    
     Statement stmt = con.createStatement();
    
     ResultSet rs = stmt.executeQuery("SELECT * FROM postit ORDER BY nachname");
    
     
    // Für jeden Eintrag im Suchergebnis wird nun ein Person-Objekt erstellt.
     while (rs.next()) {
     try {
     Person p = new PersonImpl();
     p.setId(rs.getInt("id"));
     p.setNachname(rs.getString("nachname"));
     p.setVorname(rs.getString("vorname"));
     p.setZip(rs.getString("zip"));
     p.setOrt(rs.getString("Ort"));
     result.add(p);
    
    
     // Hinzufügen des neuen Objekts zum Ergebnisvektor
     result.addElement(p);
     }
     catch(RemoteException ex) {
     ex.printStackTrace();
     // Bei einer evtl. Exception brechen wir die while-Schleife ab.
     break;
     }
     }
     } catch (SQLException e2) {
     e2.printStackTrace();
     }
    
     // Ergebnisvektor zurückgeben
     return result;
    
     }
    
    Wenn dies also geschehen ist, muss ich den Ergebnisvektor irgendwie abfangen um in in die jList zu schreiben. Dazu habe ich diese Klasse:

    Code:
    package gui;
    
    import data.*;
    import java.rmi.RemoteException;
    
    /**
     *
     * @author xy
     */
    public class PersonInfo {
    
    // private int id;
    
     private String nachname;
    
     private String vorname;
    
     private String zip;
    
     private String ort;
    
     private Person p;
    
     public PersonInfo(Person p){
     try {
     this.p = p;
     nachname = p.getNachname();
     vorname = p.getVorname();
     zip = p.getZip();
     ort = p.getOrt();
    
     } catch (RemoteException re) {
     System.out.println("RemoteException");
     System.out.println(re);
     }
     }
    
     /**
     * Die String-Darstellung einer Person besteht aus Vorname und Nachname, Zip, Ort.
     */
     @Override
     public String toString() {
     return vorname + ", " + nachname + ", " + zip + ", " + ort;
     }
    
     public Person getPerson(){
     return p;
     }
    
    }
    
    

    Nun sehen wir hier meine jList die ich gerne mit den PersonenDaten aus der DB füllen würde.
    Nur leider komm ich absolut nicht weiter.. Vielleicht kann mir hier ja einer von euch auf die Sprünge helfen.

    Code:
    package gui;
    
    
    import java.awt.Dimension;
    import javax.swing.DefaultListModel;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JScrollPane;
    
    
    
    public class JListTester extends JFrame {
    
     public JListTester(){
    
     DefaultListModel dlm = new DefaultListModel();
     JList list = new JList(dlm);
    
    // Elemente zum Model und somit Liste adden:
    
     dlm.addElement("test");
    
    
    
    //Standard:
    
     this.setSize(new Dimension(300,200));
     JScrollPane jScrollPane = new JScrollPane();
     jScrollPane.setViewportView(list);
     getContentPane().add(jScrollPane);
    
    
     }
     public static void main(String[] args) {
     JListTester lt =new JListTester();
     lt.setVisible(true);
     }
    }
    
     
  2. 5. Juli 2009
    AW: JAVA jList mit Daten aus DB füllen

    Steht denn in deiner Liste jetzt "Test" drinne, oder funktioniert nichtmal das?
    Wenn es funktioniert dann sollte folgendes auch funktionieren. Einfach ne extended for-loop:

    Code:
    for(Person p : deineKlasse.getAll()){
     dlm.addElement(p.toString());
    }
    
    //und EVENTUELL noch (keine ahnung ob nötig):
    
    list.updateUI();
    
    
    Bin leider grad nicht an meinem heimischen PC und kann es nicht testen. Habe auch noch nie Vectoren benutzt, ich würde lieber ne ArrayList nehmen und die mit Objekten vom Typ Person füllen statt ein Vector, aber vllt. hast du ja deine Gründe (ehrlich gesagt weiß ich garnicht ob man sone extended for-loop auf einen Vector anwenden kann, bei einer ArrayList<Person> würde es gehn).
    Sag ob es hilft oder nicht. wenn nicht probier ich es morgen an meinem richtigen PC, spätestens dann haste die Lösung für das Problem
     
  3. 5. Juli 2009
    AW: JAVA jList mit Daten aus DB füllen

    Hey Danke!

    also das "test" wird angezeigt.

    Mein Problem ist nur, dass ich nicht an das "return result" aus dem PersonenMapper.getAll() komme.

    Deswegen habe ich ja die Klasse PersonInfo.

    doch ich kann sie irgendwie nicht instanziieren um auf ihre Methoden zuzugreifen.

    Oder habe ich da irgendwie einen Denkfehler drin?
     
  4. 5. Juli 2009
    AW: JAVA jList mit Daten aus DB füllen

    Was meinst du damit: "Mein Problem ist nur, dass ich nicht an das "return result" aus dem PersonenMapper.getAll() komme."

    Bekommst du als Rückgabewert null oder was? Oder stehen in dem Vector Daten drinn?

    Prinzipiell geht es so:
    Erstmal würde ich statt replacen: Vector mit ArrayList (einfach nur die Worte austauschen.. mit dem add() und dem <Person> bleibt gleich).

    Dann die gefüllte ArrayList returnen. Dann einfach in JListTester:

    Code:
    PersonenMapper pm = new PersonenMapper();
    
    for(Person p : pm.getAll())
     dlm.addElement(p.toString());
    
    Die extendet Loop geht durch die ArrayList (die ja die getAll() returned) und für jedes Objekt vom Typ "Person" added sie den Namen der Person zum JList-Model


    So Schreibst du in die Liste den Namen der Person (wenn deine Klasse "Person" die entsprechenden getter methoden hat).. Den Sinn von PersonInfo hab ich nicht verstanden

    Edit: ich seh grad du hast die toString() überschrieben.. die würde ich in die Klasse Person schreiben.. habe meinen Text editiert

    edit2: PersonInfo is doch überflüssig irgendwie? Du brauchst einfach nur ne Klasse Person mit Variablen wie "name, vorname, zip, ort" und getter methoden "getName(), getVorname().. usw. und toString()"
     
  5. 5. Juli 2009
    AW: JAVA jList mit Daten aus DB füllen

    Hey danke Xen0n!!
    Du hast mir echt weitergeholfen.

    Hab in meiner Klasse Person/PersonImpl eine toString Methode geschrieben

    Code:
     public String toStringAll() {
     return vorname + ", " + nachname + ", " + zip + ", " + ort;
     }
    
    
    Code:
    
     for(Person p : verwaltung.getAll())
     dlm.addElement(p.toStringAll());
    
    
    Jetzt wird es auch ordentlich angezeigt!

    Kann man diese jList nun auch über einen button aktualisieren? Also das die jList wärhend dem programm betrieb neu läd und somit die DB neu ausliest?

    EDIT: Okay Refresh funktioniert, meine Probleme sind gelöst!
    Danke nochmal!


    Grüße
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.