NullPointerException während ResultSet

Bitte aktiviere JavaScript!
Guten Abend,

als ich dachte, dass ich gerade eine Strähne hatte, wurde ich prompt eines besseren belehrt. Kurz: Ich möchte während das ResultSet die Datenbank ausließt, nach jedem Durchgang ein Objekt erstellen, dass dann in eine LIste gespeichert wird. Wenn ich vor der Stelle im Code wo das Door Objekt erstellt wird (fett markiert in roter Schrift), und ich beispielsweise die Nummer aus der Datenbank in der Console angezeigt haben möchte, wird es korrekt angezeigt.
Setzte ich die Ausgabe in die Console nach der Stelle wo das Objekt erstellt wird, wird plötzlich alles nur noch als 0 angezeigt. Seltsamerweise wird auch kein Objekt erstellt. Die Liste ist deshalb auch leer.

Warum in aller Welt ist das so? :)



Java:
public ObservableList<Door> LoadTable() {

        ObservableList<Door> listOfDoors = FXCollections.observableArrayList();

        try {


            Connection connection = DriverManager.getConnection(
                    "Möp");

            String checkAccountDataQuery = "Select * FROM KeyRegister";

            Statement stat = connection.createStatement();

            ResultSet rs = stat.executeQuery(checkAccountDataQuery);

            while(rs.next()) {
              
                System.out.print(rs.getString("Nummer vor Objekterstellung") + "   ");

              
                Door newDoor = new Door();

  System.out.print(rs.getString("Nummer nachObjekterstellung") + "   ");
          
                newDoor.SetNummer(rs.getString("Nummer"));
                newDoor.SetBezeichnung(rs.getString("Bezeichnung"));
                newDoor.SetOrt(rs.getString("Ort"));
                newDoor.SetMaße(rs.getString("Maße"));
                newDoor.SetSchrank(rs.getString("Schrank"));
                newDoor.SetReserve(rs.getString("Reserve"));
                newDoor.SetUmlauf(rs.getString("Umlauf"));
                newDoor.SetPersonen(rs.getString("Personen"));
                newDoor.SetXcoordinate(rs.getString("Xcoordinate"));
                newDoor.SetYcoordinate(rs.getString("Ycoordinate"));
                newDoor.SetFeldnummer(rs.getString("Feldnummer"));     
          
              
                listOfDoors.add(newDoor);

            }
            connection.close();
          
        } catch (Exception ex) {ex.printStackTrace();}
      
        System.out.print(listOfDoors.size());

        return listOfDoors;
      
    }
}
Besten Dank und schönen Abend noch
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Gibt es eine NullPointerException? Die ist zwar im Titel erwähnt, im Betrag aber nicht mehr...
Wenn ja: Stacktrace, und in welcher Zeile deines Codes die auftritt,

Wenn ich vor der Stelle im Code wo das Door Objekt erstellt wird (fett markiert in roter Schrift), und ich beispielsweise die Nummer aus der Datenbank in der Console angezeigt haben möchte, wird es korrekt angezeigt.
Setzte ich die Ausgabe in die Console nach der Stelle wo das Objekt erstellt wird, wird plötzlich alles nur noch als 0 angezeigt. Seltsamerweise wird auch kein Objekt erstellt.
Aktuell versuchst du die Spalten "Nummer vor Objekterstellung" und "Nummer nachObjekterstellung" aus der Datenbank abzufragen - ich hoffe sehr, dass diese beiden Spalten nicht in deiner Datenbank existieren.
 
Ja es gibt eine NullpointerException. Ich habe die Stelle überprüft. Ich sehe daran nichts verwerfliches.

Code:
/**************Setter******************/
    
    
    public void SetNummer(String value) {
         nummer.set(value);
    }
Zumal das ResultSet ja korrekt ausliest. Und warum solltest du hoffen, dass diese beiden Spalten nicht in der Datenbank existieren? "Nummer" befindet sich in der Datenbank.
 
Wenn die NPE wirklich in der Zeile `nummer.set(value)` auftritt, dann ist der einzige Grund dafür, dass `nummer` null ist bzw. nicht initialisiert ist. Zeig mal die Definition deiner `Door` Klasse.
 
Code:
package application;

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Door {
    
    private StringProperty nummer;
    private StringProperty bezeichnung;
    private StringProperty ort;
    private StringProperty maße;
    private StringProperty schrank;
    private StringProperty reserve;
    private StringProperty umlauf;
    private StringProperty personen;
    private StringProperty xCoordinate;
    private StringProperty yCoordinate;
    private StringProperty feldnummer;
    
    
    public Door(String nummer, String bezeichnung, String ort, String maße, String schrank, String reserve, String umlauf, String personen, String xCoordinate, String yCoordinate, String feldnummer) {
        
        this.nummer = new SimpleStringProperty(nummer);
        this.bezeichnung = new SimpleStringProperty(bezeichnung);
        this.ort = new SimpleStringProperty(ort);
        this.maße = new SimpleStringProperty(maße);
        this.schrank = new SimpleStringProperty(schrank);
        this.reserve = new SimpleStringProperty(reserve);
        this.umlauf = new SimpleStringProperty(umlauf);
        this.personen = new SimpleStringProperty(personen);
        this.xCoordinate = new SimpleStringProperty(xCoordinate);
        this.yCoordinate = new SimpleStringProperty(yCoordinate);
        this.feldnummer = new SimpleStringProperty(feldnummer);
    }
    
    
    public Door() {
        
    }
    
    /********Getter*************************/
    
    public String GetNummer() {
         return nummer.get();
    }
    
    public String GetBezeichnung() {
         return bezeichnung.get();
    }
    
    public String GetOrt() {
         return ort.get();
    }
    
    public String GetMaße() {
         return maße.get();
    }
    
    public String GetSchrank() {
         return schrank.get();
    }
    
    public String GetReserve() {
         return reserve.get();
    }
    
    public String GetUmlauf() {
         return umlauf.get();
    }
        
    public String GetPersonen() {
         return personen.get();
    }
    
    public String GetXcoordinate() {
         return xCoordinate.get();
        
    }
    
    public String GetYcoordinate() {
         return yCoordinate.get();
    }
    
    public String GetFeldnummer() {
         return feldnummer.get();
    }
    
    
    /**************Setter******************/
    
    
    public void SetNummer(String value) {
         nummer.set(value);
    }
    
    public void SetBezeichnung(String value) {
         bezeichnung.set(value);
    }
    
    public void SetOrt(String value) {
         ort.set(value);
    }
    
    public void SetMaße(String value) {
         maße.set(value);
    }
    
    public void SetSchrank(String value) {
         schrank.set(value);
    }
    
    public void SetReserve(String value) {
         reserve.set(value);
    }
    
    public void SetUmlauf(String value) {
         umlauf.set(value);
    }
    
    public void SetPersonen(String value) {
         personen.set(value);
    }
    
    public void SetXcoordinate(String value) {
         xCoordinate.set(value);
    }
    
    public void SetYcoordinate(String value) {
         yCoordinate.set(value);
    }
    
    public void SetFeldnummer(String value) {
         feldnummer.set(value);
    }
    
    

}
 
Na, da haben wir doch schon die Ursache gefunden. Die ganzen Felder werden nur im Konstruktor mit den vielen Parametern initialisiert, nicht jedoch in dem parameterlosen Konstruktor, den du aufrufst per `Door newDoor = new Door();`.
Demnach sind alle Felder null und jeder Zugriff auf Methoden der StringProperty Felder führt zu einer NPE.
 
Argh :D Den Konstruktor dort unten hatte ich ganz vergessen. Bei so einem Konstruktor ist natürlich alles null. Und dass ich die Parameter nach der Objekterstellung hinzufüge, bringt an der Stelle auch nix.

Danke
 
Zumal das ResultSet ja korrekt ausliest. Und warum solltest du hoffen, dass diese beiden Spalten nicht in der Datenbank existieren? "Nummer" befindet sich in der Datenbank.
"Nummer" ist etwas anderes als "Nummer vor Objekterstellung" und "Nummer nachObjekterstellung" ;)

"Nummer" würde ich in deiner DB erwarten - "Nummer vor Objekterstellung" und "Nummer nachObjekterstellung" allerdings nicht.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben