DBException

numbler280

Neues Mitglied
Moin Leute,

ich sitze seit einer geraumen Zeit an folgendem Problem: Ich möchte ein Rechnungsprogramm schreiben, welches mit einer Datenbank verknüpft ist und damit Rechnungen erstellen von Aufträgen. Mein Problem ist, dass ich jedesmal folgende Fehlermeldung bekomme, sobald ich entsprechende Daten in die DB speichern lassen möchte.


Fehlermeldung:
Java:
Verbindung wird aufgebaut...Nein, leider nicht!
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
    at javafx.base/javafx.event.Event.fireEvent(Unknown Source)
    at javafx.graphics/javafx.scene.Node.fireEvent(Unknown Source)
    at javafx.controls/javafx.scene.control.Button.fire(Unknown Source)
    at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source)
    at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(Unknown Source)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
    at javafx.base/javafx.event.Event.fireEvent(Unknown Source)
    at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Unknown Source)
    at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1300(Unknown Source)
    at javafx.graphics/javafx.scene.Scene.processMouseEvent(Unknown Source)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(Unknown Source)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source)
    at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(Unknown Source)
    at javafx.graphics/com.sun.glass.ui.View.notifyMouse(Unknown Source)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
    at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javafx.reflect.Trampoline.invoke(Unknown Source)
    at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(Unknown Source)
    at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(Unknown Source)
    ... 48 more
Caused by: DB.DBException: Rechnung konnte nicht erstellt werden
    at Ansicht.FXMLController.rechnungspeichern(FXMLController.java:99)
    ... 58 more
FXMLController:
Java:
package Ansicht;


import java.io.IOException;

import DB.DBException;
import DB.DBInterface;

import Daten.Rechnung;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;

public class FXMLController {

  
    DBInterface db;
  
    @FXML private Button button;
  
    // FXML Elemente für Rechnungserstellung deklarieren
    @FXML private TextArea taRechnungsnummer;
    @FXML private TextArea taAuftragsnummer;
    @FXML private TextArea taRechnungsnummer2;
    @FXML private TextArea taRechnungsdatum;
    @FXML private TextArea taKundennummer;
    @FXML private TextArea taName;
    @FXML private TextArea taGesamtbetrag;
    @FXML private TextArea taAuftragsnummer2;
    @FXML private TextArea taAuftragsdatum;
  
  

    // Methoden  für Szenenwechsel der einzelnen FXML Seiten
    public void Szenenwechsel1(ActionEvent event) throws IOException
    {
        Parent erstellungParent = FXMLLoader.load(getClass().getResource("R.Erstellung.fxml"));
        Scene  erstellungScene = new Scene (erstellungParent);
      
        Stage window = (Stage)((Node)event.getSource()).getScene().getWindow();
        window.setScene(erstellungScene);
        window.show();
      
    }
  
    public void Szenenwechsel2(ActionEvent event) throws IOException
    {
        Parent löschenParent = FXMLLoader.load(getClass().getResource("R.Löschen.fxml"));
        Scene  löschenScene = new Scene (löschenParent);
      
        Stage window = (Stage)((Node)event.getSource()).getScene().getWindow();
        window.setScene(löschenScene);
        window.show();
      
    }
  
  
    public void Abbruch(ActionEvent event) throws IOException
    {
        Parent abbrechenParent = FXMLLoader.load(getClass().getResource("Startseite.fxml"));
        Scene  abbrechenScene = new Scene (abbrechenParent);
      
        Stage window = (Stage)((Node)event.getSource()).getScene().getWindow();
        window.setScene(abbrechenScene);
        window.show();
      
    }
  
    // Methode zum speichern einer Rechnung
    @FXML
    protected void rechnungspeichern(){
          
    try {
                 try {
                    db = DBInterface.getInstance();
                    db.openConnection("string", "string"); //DBInterface Methode zum Herstellen einer DB-Verbindung
                    System.out.println("Es hat funktioniert!");
                    }
                 catch(Exception ex){
                    System.out.println("Nein, leider nicht!");
                    }
                    //holen der einzelnen Inhalte der TextAreas für die Rechnung
                    String a = taRechnungsnummer.getText();
                    String b = taAuftragsnummer.getText();
                    Rechnung r = new Rechnung(a,b);
                    db.addRechnung(r); //DB Methode zum hinzufügen einer Rechnung
                    db.closeConnection(); // DB Methode zum Schließen der Db-Verbindung
                    //die TextAreas werden wieder gecleart
                    taRechnungsnummer.clear();
                    taAuftragsnummer.clear();
                    }
                catch(Exception ex){
                    throw new DBException("Rechnung konnte nicht erstellt werden");
          
            }
                  
        }
  
  
  
  
}

Rechnung:
Java:
package Daten;

public class Rechnung {

        //Kundennummer - identifiziert Rechnung eindeutig
        private String rechnungsnummer;
        //-------------nähere Infos über die Kunden (Nachname)-----------------------
        private String auftragsnummer;
      
      
        //Konstruktoren
        public Rechnung (String rechnungsnummer, String auftragsnummer) {
            this.rechnungsnummer = rechnungsnummer;
            this.auftragsnummer = auftragsnummer;
        }
      
        public Rechnung (String rechnungsnummer) {
            this.rechnungsnummer = rechnungsnummer;
        }
      
        public Rechnung (){
          
        }
      
      
        //GETTER UND SETTER
      
        public String getRechnungsnummer() {
            return rechnungsnummer;
        }

        public void setRechnungsnummer(String rechnungsnummer) {
            this.rechnungsnummer = rechnungsnummer;
        }

        public String getAuftragsnummer() {
            return auftragsnummer;
        }

        public void setAuftragsnummer(String auftragsnummer) {
            this.auftragsnummer = auftragsnummer;
        }
      
}


Dachte erst es lieg an den Konstruktoren, aber habe dort keine Fehler finden können. Wäre nett, wenn sich jemand findet, der eventuell eine Lösung hat :).
 
Zuletzt bearbeitet von einem Moderator:

fhoffmann

Top Contributor
Dann gibt doch eine genauere Fehlermeldung aus:
Statt
Java:
catch(Exception ex){
   System.out.println("Nein, leider nicht!");
}
besser:
Java:
catch(Exception ex){
   System.out.println("Fehler bei Datenbankverbindung:");
   ex.printStackTrace();
   return;
}
 

mihe7

Top Contributor
Es ist doch immer wieder interessant. Da wird genau beschrieben, an welcher Stelle ein Fehler auftritt, dann wird tonnenweise Code gepostet, der alles nichts mit dieser Stelle zu tun hat, dafür werden die interessanten Dinge weggelassen.

@numbler280 Du bekommst "Nein, leider nicht" als Fehler ausgegeben. Das betrifft diesen Block:
Java:
                 try {
                    db = DBInterface.getInstance();
                    db.openConnection("string", "string"); //DBInterface Methode zum Herstellen einer DB-Verbindung
                    System.out.println("Es hat funktioniert!");
                    }
                 catch(Exception ex){
                    System.out.println("Nein, leider nicht!");
                    }
D. h. die Fehlerursache muss in den beiden Zeilen
Java:
                    db = DBInterface.getInstance();
                    db.openConnection("string", "string"); //DBInterface Methode zum
bzw. den darin aufgerufenen Methoden zu finden sein. DBInterface hast Du nicht gepostet. Hör auf @fhoffmann und lass Dir den Stacktrace ausgeben. Ins Blaue geraten: Du hast den JDBC-Treiber nicht im Classpath.
 

Neue Themen


Oben