# Nur ein Datensatz wird angezeigt, obwohl mehrere existieren



## Weima (2. Jan 2006)

Hi Leute!
Ich schreib mir grad ein Programm zusammen, welches JTables verwendet (diese werden mit DB-Daten gefüttert, ist also schon die richtige Topic  ).

Ich habe folgenden Code:

```
fachlehrer = new Vector();
data = new Vector();

String query = "SELECT ID, Nachname, Vorname FROM Lehrer ORDER BY Nachname ASC";

rs = stmt.executeQuery(query);

//Legt alle Fachlehrer-Objekte an und legt sie in einem Vector ab.
while(rs.next()) new Fachlehrer(rs.getInt(1),rs.getString(2),rs.getString(3));

//Belegt data mit dem kompletten Inhalt der Tabelle.
for(int i=0; i<fachlehrer.size(); i++) data.add(((Fachlehrer)fachlehrer.get(i)).getData());
```
stmt ist das Statement, rs das ResultSet, fachlehrer und data sind Vectoren. In derwhile-Schleife wird der Konstruktor von Fachlehrer aufgerufen und das Objekt fügt sich selber dem Vector fachlehrer hinzu. In der for-Schleife werden die Daten für die Tabelle aufbereitet.

Nun zu meinem Problem: Gebe ich den Query einfach in die DB ein, werden mir massig Datensätze angezeigt. Im Programm wird mir aber nur ein Datensatz angezeigt... Ich suche mich hier dusslig... Also bitte helft mir 

Danke im vorraus!
Weima


----------



## Lim_Dul (2. Jan 2006)

Wie fügt es sich selber hinzu?


----------



## Weima (2. Jan 2006)

fachlehrer.add(this);

fachlehrer ist eine Klassenvariable, also daran kanns nicht liegen.


----------



## PoiSoN (2. Jan 2006)

Lass mich raten... es wird nur der letzte Datensatz angezeigt?


----------



## Weima (2. Jan 2006)

Nein. Der erste wird angezeigt... Und ich such und such dort bei der while-Schleife rum, weil das ResultSet stimmt (hab mittels rs.last() was ausgegeben und das steht wirklich am Ende des ResultSets). Der Fehler kann doch eigentlich nur noch dort liegen... Oder nicht?


----------



## André Uhres (2. Jan 2006)

Für mich funktioniert alles, wie dieses *KSKB* zeigt:

```
/*
 * FachlehrerTest_1.java
 */
import java.sql.*;
import java.util.*;
public class FachlehrerTest_1 {
    public FachlehrerTest_1() {
        try {
            connect();
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            System.exit(0);
        }
        fachlehrer = new Vector();
        data = new Vector();
        String query = "SELECT ID, Nachname, Vorname FROM Lehrer ORDER BY Nachname ASC";
        try {
            rs = stmt.executeQuery(query);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        try {
//Legt alle Fachlehrer-Objekte an und legt sie in einem Vector ab.
            while(rs.next()) {
                new Fachlehrer(rs.getInt(1),rs.getString(2),rs.getString(3));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
//Belegt data mit dem kompletten Inhalt der Tabelle.
        for(int i=0; i<fachlehrer.size(); i++) {
            data.add(((Fachlehrer)fachlehrer.get(i)).getData());
        }
        for (Iterator it = data.iterator(); it.hasNext();) {
            String elem = (String) it.next();
            System.out.println(elem);
        }
    }
    private void connect()throws SQLException{
        DriverManager.registerDriver( new sun.jdbc.odbc.JdbcOdbcDriver() );
        databaseURL = databaseURL + DATABASE_NAME;
        connection = DriverManager.getConnection(databaseURL, DATABASE_USER, USER_PASSWORD);
        stmt = connection.createStatement();
    }
    public static void main(String[] args) { new FachlehrerTest_1(); }
    private Vector fachlehrer, data;
    private ResultSet rs;
    private Statement stmt;
    private Connection connection;
    private String databaseURL = "jdbc:odbc:";
    private final String DATABASE_NAME = "test";
    private final String DATABASE_USER = "root";
    private final String USER_PASSWORD = "sql";
    private final String TABLE_NAME = "Lehrer";
    class Fachlehrer {
        String data;
        public Fachlehrer(int i, String s1, String s2){
            data = i+s1+s2;
            fachlehrer.add(this);
        }
        public String getData(){
            return data;
        }
    }
}
```


----------



## Weima (2. Jan 2006)

Oh Mann! Ich wusste, dass es was ganz profanes ist!
Ich hatte das ResultSet einmal überschrieben!   

Jetzt geht jedenfalls alles...

Nochmals Danke an alle!!!


----------



## André Uhres (2. Jan 2006)

Da sieht man schon wieder einmal wie nützlich ein *KSKB* ist!
KSKB bedeutet:  *K*urzes, *S*elbständiges, *K*ompilierbares *B*eispiel
Ein KSKB vorzubereiten kostet Anstrengung. Der Lohn: schnellere Lösung des Problems.

Oft führt es dazu, dass man die Lösung selbst findet, ohne etwas zu posten,
weil man dann nämlich gezwungen ist, das Problem auf das Wesentliche zu reduzieren und somit
die *Lösung leichter zu finden* ist  :wink:


----------

