# Vector Verhalten beim DataModel seltsam



## XoxoL (16. Aug 2010)

Hallo allerseits,

ich habe folgendes Problem mit einem Vector in einem DataModel:
;(

```
public static Vector<dbKunden> getKunden(){
       
        Vector<dbKunden> kunden = new Vector<dbKunden>();
        try {
            Statement stmt = Installer.getConnection().createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM kunden");
            while (rs.next()) {
                kunden.add(new dbKunden(rs.getInt(1), rs.getString(2), rs.getString(4), rs.getString(5)));
            }
            rs.close();
            stmt.close();
        } catch (SQLException e) {
            Exceptions.printStackTrace(e);
        }
        return kunden;
    }
```

in der Tabelle Kunden sind fünf verschiedene Einträge normallerweise solte der Vector nach allen Durchläufen auch fünf verschieden Einträge beinhalten tut er aber nicht. Bei der rückgabe beinhaltet der Vector fünf gleiche Einträge (fünf mal der letzte eintrag aus de Tabelle) d. h. alle vorheriegen Einträge werden jeweils beim nächsten mal einfach durch den akruellen überschrieben.

P.S. beim Durchlauf mit dem Debuger habe ich herausgefunden das alle Einträge der Tabelle kunden in der WhileSchleife richtig rausgeholt werden.

ich bin für jede Hilfe dankbar


----------



## eRaaaa (16. Aug 2010)

XoxoL hat gesagt.:


> normallerweise solte der Vector nach allen Durchläufen auch fünf verschieden Einträge beinhalten tut er aber nicht.


 Wie/Womit hast du das überprüft? Bist du sicher dass du den richtigen Vektor angeschaut hast?


> Bei der rückgabe beinhaltet der Vector fünf gleiche Einträge (fünf mal der letzte eintrag aus de Tabelle) d. h. alle vorheriegen Einträge werden jeweils beim nächsten mal einfach durch den akruellen überschrieben.
> P.S. beim Durchlauf mit dem Debuger habe ich herausgefunden das alle Einträge der Tabelle kunden in der WhileSchleife richtig rausgeholt werden.



Und im Konstruktor von dbKunden steht zufällig nicht Mist drin?


----------



## Michael... (16. Aug 2010)

So wie es sich anhört steckt handelt es sich immer um das selbe Objekt (Vermutung: Es wird fünfmal  der zuletzt eingelesene Eintrag angezeigt)
Da stellen sich die Fragen:
- was steckt hinter dbKunden? (Klassennamen beginnen in Java üblicherweise mit einem Grossbuchstaben)
- was wird mit dem Vector aus der Methode gemacht?
- verwendet die Klasse dbKunden eventuell statische Variablen?
- ...


----------



## XoxoL (16. Aug 2010)

ich habe auch vermutet das der Fehler in der Klasse dbKunden liegt kann aber nicht finden.
Hier die Klasse:


```
public class dbKunden {

    private static Integer id=0;
    private static String name = new String();
    private static String vorname = new String();
    private static String firma = new String();
    private static String firma2 = new String();
    private static String tel = new String();
    private static String fax = new String();
    private static String email = new String();
    private static String strasse = new String();
    private static String HausNr = new String();
    private static String plz = new String();
    private static int sachnr=0;

    public dbKunden(Integer id, String name, String firma, String firma2){
        this.id = id;
        this.name = name;
        this.firma = firma;
        this.firma2 = firma2;  
    }
  
    public static void setHausNr(String hausnr){
        dbKunden.HausNr = hausnr;
    }
    public static String getHausNr(){
        return HausNr;
    }
    public static void setId(Integer i) {
        dbKunden.id = i;
    }
    public static Integer getId() {
        return id;
    }
    public static String getName() {
        return name;
    }
    public static void setName(String name) {
        dbKunden.name = name;
    }
    public static String getVorname() {
        return vorname;
    }
    public static void setVorname(String vorname) {
        dbKunden.vorname = vorname;
    }
    public static String getFirma() {
        return firma;
    }
    public static void setFirma(String firma) {
        dbKunden.firma = firma;
    }

    public static String getTel() {
        return tel;
    }
    public static void setTel(String tel) {
        dbKunden.tel = tel;
    }
    public static String getFax() {
        return fax;
    }
    public static void setFax(String fax) {
        dbKunden.fax = fax;
    }
    public static String getStrasse() {
        return strasse;
    }
    public static void setStrasse(String strasse) {
        dbKunden.strasse = strasse;
    }
    public static String getPlz() {
        return plz;
    }
    public static void setPlz(String plz) {
        dbKunden.plz = plz;
    }
    public static void setEmail(String email) {
        dbKunden.email = email;
    }
    public static void setFirma2(String firma2) {
        dbKunden.firma2 = firma2;
    }
    public static void setSachnr(int sachnr) {
        dbKunden.sachnr = sachnr;
    }
    public static String getEmail() {
        return email;
    }
    public static String getFirma2() {
        return firma2;
    }
    public static int getSachnr() {
        return sachnr;
    }
}
```

villeicht seht ihr den Fehler. :bahnhof:


----------



## eRaaaa (16. Aug 2010)

Hat doch Michael schon richtig vermutet...lies dir mal durch was das Schlüsselwort static macht!


----------



## XoxoL (16. Aug 2010)

hab schon verstanden danke. 

hab die Klasse aus einem älteren proekt einfach rauskopiert und nicht nachgedacht. :autsch:


----------



## Sekundentakt (16. Aug 2010)

Was gemeint ist, ist folgender Sachverhalt:


> static kennzeichnet Implementierungen, die ohne eine Objekt-Referenz verwendbar sind. Das Schlüsselwort wird bei der Deklaration von Feldern, Methoden und inneren Klassen verwendet. Felder, Methoden und Klassen, die mittels static gekennzeichnet sind, werden im Kontext der Klasse verwendbar und sind an kein Objekt gekoppelt.


Mit anderen Worten: static-Variablen haben für *alle* Objekte der Klasse Gültigkeit.

Grüße


----------

