# ResultSet NullPointerException



## Happymaker (7. September 2004)

Hallo!
Ich möchte eine Collection mit mehreren Objekten Füllen!
Die Objekteigenschaften werden aus einer MySql Datenbank ausgelesen 
und gespeichert!
Jedes mal wenn mein Resultset in der Datenbank auf ein Feld mit einem Null 
Wert stost ist es vorbei.
Vielleicht kann mir ja jemand helfen!


----------



## Christian Fein (7. September 2004)

```
if(rs.getString("spalte")!=null)
           collection.add(rs.getString("spalte"));
```

Oder was willst du genau?!


----------



## teppi (7. September 2004)

Hm ich weiss jetzt nicht genau was du mit  " ist es vorbei" meinst .. Aber ResultSet hat die Methode:

 public boolean wasNull()

 .. Mit der kann man sicher eine entsprechende Abfrage machen und solche Werte abfangen.


----------



## Happymaker (7. September 2004)

Ich hab das mal gleich ausprobiert!
bei mir würde das so aussehen!

if (rse.getString("PersNr")!= null)
{
benutzerstamm.setPersNr(rse.getString("PersNr"));
}

Mit dem Vorbei meine ich dass dann die NullPointerException kommt!

Noch ein paar infos benutzerstamm enthält alle eigenschaften eines Mitarbeiter
in einer Firma! Praktisch eine Mitarbeiterverwaltung!

jetzt noch eine Frage:

Würdet ihr eine LinikedList einen Array oder Collection ...
nehmen um alle Mitarbeiter speichern zu können?

Danke für die super schnelle Antwort!
Chris


----------



## Romsl (7. September 2004)

Kann es sein, dass du eine NullPointerException bekommst? Die genau Fehlermeldung weiß ich nicht mehr, aber im Wortlaut könnte es "after result set is closed...." sein.

Diese Exception bekommst du wenn du entweder das ResultSet Object, das Statement Object oder die Connection mit .close() beendest.

Mit dem ResultSet arbeitest du, soviel ich weiß, direkt mit der/auf der Datenbank.

Gruß

Romsl


----------



## Happymaker (7. September 2004)

Noch was kann ich mir da nicht eine Methode schreiben die mir das überprüft ob ein Feld in der Datenbank NULL ist?
Weil ich ungefähr 20 Felder überprüfen muss!
Das ist ein bisschen Redundant!*g*

Chris


----------



## Happymaker (7. September 2004)

Nein eine Solche NullPointerException bekomme ich nicht!
ich bekomme die Fehlermeldung erst in der While schleife in der ich das Resultset durchlaufe, und wenn das ResultSet auf einen Null Wert in der Datenbank stöst!
Chris


----------



## Romsl (7. September 2004)

Du kannst dir die Anzahl der Spalten auslesen.


```
Statement stmt = con.createStatement();
ResultSet data = stmt.executeQuery("SELECT * FROM tabelle");
ResultSetMetaData metaData = data.getMetaData();
int columns = metaData.getColumnCount();
```

Und in der while Schleife eine for Schleife legen, die so lange läuft wie du Spalten hast.

Gruß Romsl


----------



## Happymaker (7. September 2004)

Und was bringt mir die for Schleife?
Ich möchte für jeden Mitarbeiter alle Eigenschaften in benutzerstamm speichern!
Diese in irgendeiner Collection oder Array oder LinkedList speichern und dann 
Ausgeben! Praktisch alle Mitarbeiter mit allen Eigenschaften!

Das mit dem 

if (rse.getString("Name_Zusatz") != null)
{
  benutzerstamm.setNameZusatz(rse.getString("Name_Zusatz"));
}

funktioniert einwandfrei!

Aber jetzt bräuchte ich noch Hilfe wie ich und wohin ich alle Mitarbeiter hinspeichere damit ich sie später ausgeben oder weiterverarbeiten kann!

Danke
Chris


----------



## Romsl (7. September 2004)

Eine LinkedList ist im weitesten Sinne eine Collection. LinkedList implementiert List und List wiederrum ist abgeleitet von Collection.

Wenn du eine LinkedList verwendest musst du eben darauf achten wenn du einen solchen NULL Wert bekommst diesen (oder einen leeren String "")  in die Liste mit aufzunehmen.

Vorteil der Liste ist, dass du keine feste Größe angeben brauchst und jeder Zeit neue Werte dazwischen schieben kannst. Nachteil was dich aber nicht stören wird ist der Höhere Aufwand bei der Suche nach Elementen in der Liste.

Du könntest jede Zeile des ResultSet in eine LinkedList oder Array einlesen. Und diese List oder dieses Array wieder in eine Liste oder Array legen.
Geschachtelte Liste. Dann hast du jeden Mitarbeiter in einer extra Liste und alle Mitarbeiter eben in einer darüberliegenden Liste.

Das gleiche würde auch mit einem Vector funktionieren.

Hoffe ich hab dich diesmal verstanden.

Gruß

Romsl


----------



## Happymaker (7. September 2004)

Genau so mit der LinkedListe möchte ich das machen!
Alle eigenschaften von jedem Mitarbeiter!
Hast du da evtl. einen Quellcode da?
ich weiß nicht so genau wie ich das machen soll!

Diesmal hast du mich haargenau verstanden!


----------



## Romsl (7. September 2004)

Du musst noch die Importe hinzufügen.

import java.util.*;
import java.sql.*;


```
public LinkedList getResultInList(ResultSet data) {
    LinkedList returnList = new LinkedList();
    
    try {
      ResultSetMetaData metaData = data.getMetaData();
      int columns = metaData.getColumnCount();

      //mit dem !data.wasNull() bin ich mir nicht sicher
      while (data.next() && !data.wasNull()) {
        LinkedList inList = new LinkedList();
        
        for (int i = 1; i <= columns; i++) {
            inList.add(data.getObject(i));
        }
        
        returnList.add(inList);
      }
    }
    catch (SQLException e) {
      e.printStackTrace();
    }

    return returnList;
  }
```


----------



## Happymaker (7. September 2004)

Danke 
ich werd ausprobieren!
Chris


----------



## Happymaker (7. September 2004)

Und wie kann ich jetzt wieder alles auslesen
Wäre super wenn du da auch ein beispiel hättest!

Chris


----------



## Romsl (7. September 2004)

Zur Verbesserung der Performance könntest du die Listen mit .toArray() in Arrays umwandeln (da eine Liste jedesmal von vorne beginnt durchzugehen wenn du die einzelnen Werte holst, mit einem Array kannst du gezielt Werte herauspicken).


```
public void getListContent(LinkedList list) {
    for (int i = 0; i < list.size(); i++) {
      LinkedList inList = (LinkedList) list.get(i);
      for (int j = 0; j < inList.size(); j++) {
        System.out.println(inList.get(j));
      }
    }
  }
```

Könntest du nicht direkt auf dem ResultSet arbeiten, ich meine ohne die Daten zuerst in eine Liste zu speichern und dann auszulesen?

Hoffe es hat Dir geholfen.

Gruß

Romsl


----------



## Happymaker (7. September 2004)

Aber mit der LinkedList sind dann die Eigenschaften meiner Klasse Mitarbeiter 
nicht gesetzt! Das ist doof!
Dann funktionieren auch meine ganzen Methoden von der Klasse nicht!
Wie kann ich das bewerkstelligen dass alle meine eigenschaften der Klasse gesetzt sind und ich eine Liste von Objekten von meiner Klasse Mitarbeiter mache?

Wäre nett wenn du mir da weiter helfen kannst!
Die ausgabe hab ich schon geschafft!

Danke


----------



## Happymaker (7. September 2004)

ich geh jetzt in Mittag!
Ich schreib dir dann so um 1 uhr nochmal!
Dann zeige ich dir meine ganzen Klassen die ich habe!
OK?
Vielleicht kommen wir dann zusammen!
Danke nochmal!
Vielleicht könntest  du mir deine Email Addy geben!
Dann kann ich es dir ganz ausführlich schicken und schreiben!

Gruß
Chris


----------



## Romsl (7. September 2004)

Du kannst auch die Objekte Mitarbeiter in einer LinkedList speichern und auslesen.

Das speichern funktioniert genau gleich, beim Auslesen musst du das erhaltene Object mit einem TypeCast auf Mitarbeiter casten.

Mitarbeiter mitarbeiter = (Mitarbeiter) list.getObject(i);

Hast du das so gemeint? Sonst poste bitte mal die Klasse Mitarbeiter.

Romsl


----------



## Happymaker (7. September 2004)

import java.util.Date;
public class BenutzerStamm{

	private String persNr = "";
	private String vorname = "";
	private String nachname = "";
	private String nameZusatz = "";
	private String strasse = "";
	private String hausNr = "";
	private String plz = "";
	private String ort = "";
	private String mobil = "";
	private String telefon = "";
	private String fax = "";
	private String email = "";
	private Date gebDatum;
	private Date eintritt;
	private Date austritt;
	private boolean vorlage;
	private String bemerkung = "";


	public BenutzerStamm(){
	}

	protected void setPersNr(String newPersNr){
		persNr = newPersNr;
	}

	protected String getPersNr(){
		return persNr;
	}

	protected void setVorname(String newVorname){
		vorname = newVorname;
	}

	protected String getVorname(){
		return vorname;
	}

	protected void setNachname(String newNachname){
		nachname = newNachname;
	}

	protected String getNachname(){
		return nachname;
	}

	protected void setNameZusatz(String newNameZusatz){
		nameZusatz = newNameZusatz;
	}

	protected String getNameZusatz(){
		return nameZusatz;
	}

	protected void setStrasse(String newStrasse){
		strasse = newStrasse;
	}

	protected String getStrasse(){
		return strasse;
	}

	protected void setHausNr(String newHausNr){
		hausNr = newHausNr;
	}

	protected String getHausNr(){
		return hausNr;
	}

	protected void setPlz(String newPlz){
		plz = newPlz;
	}

	protected String getPlz(){
		return plz;
	}

	protected void setOrt(String newOrt){
		ort = newOrt;
	}

	protected String getOrt(){
		return ort;
	}

	protected void setMobil(String newMobil){
		mobil = newMobil;
	}

	protected String getMobil(){
		return mobil;
	}

	protected void setTelefon(String newTelefon){
		telefon = newTelefon;
	}

	protected String getTelefon(){
		return telefon;
	}

	protected void setFax(String newFax){
		fax = newFax;
	}

	protected String getFax(){
		return fax;
	}

	protected void setEmail(String newEmail){
		email = newEmail;
	}

	protected String getEmail(){
		return email;
	}

	protected void setGebDatum(Date newGebDatum){
		gebDatum = newGebDatum;
	}

	protected Date getGebDatum(){
		return gebDatum;
	}

	protected void setEintritt(Date newEintritt){
		eintritt = newEintritt;
	}

	protected Date getEintritt(){
		return eintritt;
	}

	protected void setAustritt(Date newAustritt){
		austritt = newAustritt;
	}

	protected Date getaustritt(){
		return austritt;
	}

	protected void setVorlage(boolean newVorlage){
		vorlage = newVorlage;
	}

	protected boolean getVorlage(){
		return vorlage;
	}

	protected void setBemerkung(String newBemerkung){
		bemerkung = newBemerkung;
	}

	protected String getBemerkung(){
		return bemerkung;
	}

	public static void main (String[] args){
		 BenutzerStamm stamm = new BenutzerStamm();

	}

}



Das wäre die Klasse! Über verbesserungsvorschläge bin sehr dankbar!


----------



## Romsl (7. September 2004)

Geh ich richtig in der Annahme, dass du Personen Daten (Mitarbeiter Daten) aus einer SQL Datenbank entnimmst. Jede erhaltene Zeile in ein Object BenutzerStamm mittels der Setter Methoden schreibst? Die ganzen erzeugten BenutzerStamm Objecte in eine Liste setzt?

Was möchtest du damit genau machen? Wenn du das nur brauchst um die Daten aus einer SQL Tabelle auszulesen, zu verändern und zu speichern kannst du auch direkt auf dem ResultSet arbeiten (Direkt auf der Datenbank).


----------



## Happymaker (7. September 2004)

Ich hab mir das so gedacht dass ich eine Graphische Oberfläche habe und dort alle Mitarbeiter anzeigen kann!
Genau ich will die Alle eigenschaften mit den set methoden speichern und dann in der Graphischen Oberfläche mit den get Methoden auslesen!
das hab ich mir so vorgestellt, ich weiß aber auch nicht ob das die beste Lösung ist!


----------



## Happymaker (7. September 2004)

Romsl hat gesagt.:
			
		

> Geh ich richtig in der Annahme, dass du Personen Daten (Mitarbeiter Daten) aus einer SQL Datenbank entnimmst. Jede erhaltene Zeile in ein Object BenutzerStamm mittels der Setter Methoden schreibst? Die ganzen erzeugten BenutzerStamm Objecte in eine Liste setzt?



So wie du das oben geschrieben hast möchte ich das haben!
Weil ich die Personendaten später auch noch brauche und dann ist es super wenn man Eine Liste mit allen Mitarbeiterdaten hat!


----------



## Romsl (7. September 2004)

```
public LinkedList getResultInList(ResultSet data) {
    LinkedList returnList = new LinkedList();
    
    try {
      ResultSetMetaData metaData = data.getMetaData();
      int columns = metaData.getColumnCount();

      //mit dem !data.wasNull() bin ich mir nicht sicher
      while (data.next() && !data.wasNull()) {
               
        BenutzerStamm mitarbeiter = new BenutzerStamm();

        for (int i = 1; i <= columns; i++) {
            switch (i) {
                case 1: mitarbeiter.setPersNr(data.getString(1));
                              break;
                case 2: mitarbeiter.setVorname(data.getString(2));
                              break;
                //case 3: ....
            }
        }
        
        returnList.add(mitarbeiter);
      }
    }
    catch (SQLException e) {
      e.printStackTrace();
    }

    return returnList;
  }
```

wäre dann wohl geeigneter für Dich


```
public void getListContent(LinkedList list) {
    for (int i = 0; i < list.size(); i++) {
      Mitarbeiter mitarbeiter = (Mitarbeiter) list.get(i);

              System.out.println(mitarbeiter.getPersNr());
              // .....
      }
}
```

Hast du das so gemeint?

Gruß Romsl


----------



## Happymaker (7. September 2004)

Danke 
Das werd ich gleich alles ausprobieren!

Gruß 
Chris


----------

