Aus zwei bestehenden Table eine zusätzliche Gemeinsame machen (JavaFX)

Zakon

Bekanntes Mitglied
Hallo ich habe eine Datenbank aus drei Tabellen Mitarbeiter,Firmen,Produkte.
Meine Frage nun ich habe eine TableUser und eine TableFirmen mit den dazugehörogen Informationen.

Java:
@FXML
    public void loadDataFirMi(ActionEvent event) {
        Connection conn = DBConnection.getInstance().getCon();
        String MiID_eingabe=MiID.getText();
        String FirID_eingabe=FirID.getText();
        try {
            data = FXCollections.observableArrayList();
            ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frimen F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID WHERE Mitarbeiter_ID ='"+MiID_eingabe+"' OR ID='"+FirID_eingabe+"'");
            while (rs.next()) {
                data.add(new UserDetails(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4)));
            }
            rs.close();

            if (conn != null && conn.isClosed()) {
                System.out.println("Connected");
            } else {
                System.out.println("Connection lost");
            }
        } catch (SQLException s) {
            System.out.println("Error " + s);
        }

        columnID.setCellValueFactory(new PropertyValueFactory<>("ID"));
        columnFirmenName.setCellValueFactory(new PropertyValueFactory<>("FirmenName"));

        tableFirmen.setItems(null);
        tableFirmen.setItems(data1);

        columnMitarbeiter_ID.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID"));
        columnVorname.setCellValueFactory(new PropertyValueFactory<>("Vorname"));
        columnNachname.setCellValueFactory(new PropertyValueFactory<>("Nachname"));
        columnFirmen_ID.setCellValueFactory(new PropertyValueFactory<>("Firmen_ID"));

        tableUser.setItems(null);
        tableUser.setItems(data);
    }

Kann ich die "zusammenfügen", dass ich halt nicht nochmal eine Table extra für beide anlegen muss und alles nochmal schreiben muss?

EDIT:
Meine Details für die jweiliogen Tabellen sehen so aus:
Java:
public class FirmenDetails {

    private final IntegerProperty ID;
    private final StringProperty FirmenName;


    public FirmenDetails(int ID,String FirmenName){
        this.ID = new SimpleIntegerProperty(ID);
        this.FirmenName = new SimpleStringProperty(FirmenName);
    }

    public int getID() {
        return ID.get();
    }

    public IntegerProperty IDProperty() {
        return ID;
    }

    public void setID(int ID) {
        this.ID.set(ID);
    }

    public String getFirmenName() {
        return FirmenName.get();
    }

    public StringProperty firmenNameProperty() {
        return FirmenName;
    }

    public void setFirmenName(String firmenName) {
        this.FirmenName.set(firmenName);
    }
}

Sind in der Controller class so verbunden:
Java:
  @FXML
    private TableView<FirmenDetails> tableFirmen;

Danke im Vorraus für eure Hilfe :)
 

lam_tr

Top Contributor
Du willst also alle Information aus drei Datenbank Tabellen in einer TableView darstellen?

Mach doch eine Klasse die die drei Klassen enthalten.

Java:
class AlleInfos{
    private User user;
    private Firma firma;
    private Produkt produkt;
}

Du kannst dann diese Wrapper Klasse dann TableView<AlleInfos>() übergeben und darstellen.
 

Zakon

Bekanntes Mitglied
Kann ich dir erst später brichten ich habe das jetzt per Copy and Paste erstmal nochmal geschrieben damit ich weiterabrieten kann und werde das erst gleich wenn ichh mein nächstes Probelm behoben habe umschreiben 😁
 

Zakon

Bekanntes Mitglied
Was mir jetzt auffällt ist,dass wenn ich jetzt eine Abfrage mache immer auf alle Tabellen zugreife. Somit muss ich auch immer die ganze Tabelle angeben oder?
Meine Frage war eher so gemeint ob es eine Möglichkeit gibt nur über den Kurzen zeitraum einer Methode eone Verbidung zwischen den Tabellen herzustellen. 🤔
 

Zakon

Bekanntes Mitglied
Controller:
Java:
 @FXML
    public void loadDataFirMi(ActionEvent event) {
        Connection conn = DBConnection.getInstance().getCon();
        String MiID_eingabe=MiID.getText();
        String FirID_eingabe=FirID.getText();

        try {
            datafimi = FXCollections.observableArrayList();
            if(MiID_eingabe != null) {
                if (FirID_eingabe != null) {
                    ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frimen F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID WHERE M.ID ='" + MiID_eingabe + "' OR F.ID='" + FirID_eingabe + "'");
                    while (rs.next()) {
                        datafimi.add(new AlleDetails(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4), rs.getString(5),rs.getInt(6)));
                    }
                    rs.close();
                }
                else{
                    ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frimen F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID WHERE M.ID ='" + MiID_eingabe + "'");
                    while (rs.next()) {
                        datafimi.add(new AlleDetails(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4), rs.getString(5),rs.getInt(6)));
                    }
                    rs.close();
                }
            }
            else{
                ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frimen F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID WHERE F.ID='" + FirID_eingabe + "'");
                while (rs.next()) {
                    datafimi.add(new AlleDetails(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4), rs.getString(5),rs.getInt(6)));
                }
                rs.close();
            }

            if (conn != null && conn.isClosed()) {
                System.out.println("Connected");
            } else {
                System.out.println("Connection lost");
            }
        } catch (SQLException s) {
            System.out.println("Error " + s);
        }

        columnID.setCellValueFactory(new PropertyValueFactory<>("ID1"));
        columnFirmenName.setCellValueFactory(new PropertyValueFactory<>("FirmenName1"));

        columnMitarbeiter_ID.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID1"));
        columnVorname.setCellValueFactory(new PropertyValueFactory<>("Vorname1"));
        columnNachname.setCellValueFactory(new PropertyValueFactory<>("Nachname1"));

        tablealleDetails.setItems(null);
        tablealleDetails.setItems(datafimi);
    }

Class:
Java:
package Main;


public class AlleDetails {
    private UserDetails user;
    private FirmenDetails firmen;
}

Habe das ganze jetzt so gemacht falls du das so meintest.
Problem ist jetzt nur das ich 1.Meine Tabelle im SceneBuilder nicht zuweisen kann weil die ganzen Column Namen ja schon vergebn sind
und 2.
java: constructor AlleDetails in class Main.AlleDetails cannot be applied to given types;
required: no arguments
found: int,java.lang.String,int,java.lang.String,java.lang.String,int
reason: actual and formal argument lists differ in length

ich diese Fehlermeldung bekomme 🤔
 

lam_tr

Top Contributor
Controller:
Java:
 @FXML
    public void loadDataFirMi(ActionEvent event) {
        Connection conn = DBConnection.getInstance().getCon();
        String MiID_eingabe=MiID.getText();
        String FirID_eingabe=FirID.getText();

        try {
            datafimi = FXCollections.observableArrayList();
            if(MiID_eingabe != null) {
                if (FirID_eingabe != null) {
                    ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frimen F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID WHERE M.ID ='" + MiID_eingabe + "' OR F.ID='" + FirID_eingabe + "'");
                    while (rs.next()) {
                        datafimi.add(new AlleDetails(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4), rs.getString(5),rs.getInt(6)));
                    }
                    rs.close();
                }
                else{
                    ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frimen F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID WHERE M.ID ='" + MiID_eingabe + "'");
                    while (rs.next()) {
                        datafimi.add(new AlleDetails(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4), rs.getString(5),rs.getInt(6)));
                    }
                    rs.close();
                }
            }
            else{
                ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frimen F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID WHERE F.ID='" + FirID_eingabe + "'");
                while (rs.next()) {
                    datafimi.add(new AlleDetails(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4), rs.getString(5),rs.getInt(6)));
                }
                rs.close();
            }

            if (conn != null && conn.isClosed()) {
                System.out.println("Connected");
            } else {
                System.out.println("Connection lost");
            }
        } catch (SQLException s) {
            System.out.println("Error " + s);
        }

        columnID.setCellValueFactory(new PropertyValueFactory<>("ID1"));
        columnFirmenName.setCellValueFactory(new PropertyValueFactory<>("FirmenName1"));

        columnMitarbeiter_ID.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID1"));
        columnVorname.setCellValueFactory(new PropertyValueFactory<>("Vorname1"));
        columnNachname.setCellValueFactory(new PropertyValueFactory<>("Nachname1"));

        tablealleDetails.setItems(null);
        tablealleDetails.setItems(datafimi);
    }

Class:
Java:
package Main;


public class AlleDetails {
    private UserDetails user;
    private FirmenDetails firmen;
}

Habe das ganze jetzt so gemacht falls du das so meintest.
Problem ist jetzt nur das ich 1.Meine Tabelle im SceneBuilder nicht zuweisen kann weil die ganzen Column Namen ja schon vergebn sind
und 2.
java: constructor AlleDetails in class Main.AlleDetails cannot be applied to given types;
required: no arguments
found: int,java.lang.String,int,java.lang.String,java.lang.String,int
reason: actual and formal argument lists differ in length

ich diese Fehlermeldung bekomme 🤔
Problem 1 und 2 verstehe ich ehrlichgesagt nicht.

Hast du im AlleInfos Klasse einen Konstruktor mit 6 Parameter erstellt?
 

Zakon

Bekanntes Mitglied
Das ist ja das Problem ich möchte ja keine 6 Parameter. am liebsten hätte ich das so,dass wenn ich für Mitarbeiter X Firma die beiden Tabellen kurzzeitig zusammenfüge und für Mitarbeiter X Produkt das gleiche halt. Oder... das ich eins für alles habe was ich ja mit deiner Vorschlag hätte nur komm ich wieder wie gerade auf Problem 1 und, dass ich halt nicht immer alle 6 Parameter asufüllen kann je nachdem was ich abfrage und somit wieder in der Fehlermeldung lande... 🤔

und @mrBrown ist kei Schweizerdeutsch 😁 das ganze soll Fir(ma)Mi(tarbeiter) darstellen 😁

EDIT: wenn ich die beiden nämlich nicht irgendwie kurzzeitig zuzsammenfügen kannn muss ich ja eine klasse für jede Kombination immer wieder schreiben. So habe ich es jetzt gemacht es funtioniert ist aber nicht besonders schön. Wenn ich dann mal 10 Tabellen habe dann wars es mit der Technik auch, weil es total unübersichtlich wird und einfach viel zu schreiben.
 
Zuletzt bearbeitet:

lam_tr

Top Contributor
Das ist ja das Problem ich möchte ja keine 6 Parameter. am liebsten hätte ich das so,dass wenn ich für Mitarbeiter X Firma die beiden Tabellen kurzzeitig zusammenfüge und für Mitarbeiter X Produkt das gleiche halt. Oder... das ich eins für alles habe was ich ja mit deiner Vorschlag hätte nur komm ich wieder wie gerade auf Problem 1 und, dass ich halt nicht immer alle 6 Parameter asufüllen kann je nachdem was ich abfrage und somit wieder in der Fehlermeldung lande... 🤔

und @mrBrown ist kei Schweizerdeutsch 😁 das ganze soll Fir(ma)Mi(tarbeiter) darstellen 😁

EDIT: wenn ich die beiden nämlich nicht irgendwie kurzzeitig zuzsammenfügen kannn muss ich ja eine klasse für jede Kombination immer wieder schreiben. So habe ich es jetzt gemacht es funtioniert ist aber nicht besonders schön. Wenn ich dann mal 10 Tabellen habe dann wars es mit der Technik auch, weil es total unübersichtlich wird und einfach viel zu schreiben.
Dann mach doch über Setter?
 

mrBrown

Super-Moderator
Mitarbeiter
und @mrBrown ist kei Schweizerdeutsch 😁 das ganze soll Fir(ma)Mi(tarbeiter) darstellen 😁
Das habe ich mir gedacht, ich habe aber nur Verachtung für Abkürzungen im Code übring :)

Das ist ja das Problem ich möchte ja keine 6 Parameter. am liebsten hätte ich das so,dass wenn ich für Mitarbeiter X Firma die beiden Tabellen kurzzeitig zusammenfüge und für Mitarbeiter X Produkt das gleiche halt. Oder... das ich eins für alles habe was ich ja mit deiner Vorschlag hätte nur komm ich wieder wie gerade auf Problem 1 und, dass ich halt nicht immer alle 6 Parameter asufüllen kann je nachdem was ich abfrage und somit wieder in der Fehlermeldung lande... 🤔
Was willst du denn machen? Eine große Tabelle, in der Mitarbeiter und Firmen zusammen drin stehen?
 

Zakon

Bekanntes Mitglied
Ich möchte eine Tabelle die ausgibt (nach eingabe der ID in den eingabe Feldern) welche zusammenhängen. Bedeutet: Mitarbeiter_ID=1 und Firmen_ID=1 Ausgabe: Mitarbeiter XY mit ID=1 und Firmen ID=1

und sorry für meine Abkürzungen 😁Programm.PNG
Hier Mal zum sehen vielleicht wird euch dann klar was ich in meinem Kopf Vorhabe 😁
 
Zuletzt bearbeitet:

Zakon

Bekanntes Mitglied
Da bin ich wieder 😁
Habe mich jetzt umentschieden das ganze mit einer Dop Down Box zu machen bedeutet ein Drop Dwon menü für die Firmen und wenn ich dort eine Firma asuwähle wird mir in der tabelle daneben dann alle Informationen zu dieser Firma (Mitarbeiter,Produkte) angezeigt.
Ich komme aber weider zum gleichen Problem mein code sieht jetzt so aus:

Java:
 //DropDown Firmen
    @FXML
    public void dropdownFirmen (ActionEvent event){
        Connection conn = DBConnection.getInstance().getCon();
        String auswahlfirma = (String) choiceBoxFirma.getSelectionModel().getSelectedItem();

        try{
            data=FXCollections.observableArrayList();
            data1=FXCollections.observableArrayList();
            data2=FXCollections.observableArrayList();

            ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frima F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID " +
                    "JOIN Produkte P ON P.ID=M.ID WHERE F.Name IS LIKE '%"+auswahlfirma+"%'");
            while (rs.next()){
                data1.add(new FirmenDetails(rs.getInt(1),rs.getString(2)));
                data.add(new UserDetails(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getInt(4)));
                data2.add(new ProduktDetails(rs.getInt(1),rs.getString(2)));
            }
            rs.close();

            if (conn != null && conn.isClosed()) {
                System.out.println("Connected");
            } else {
                System.out.println("Connection lost");
            }
        }catch(Exception e){
            System.out.println(e.fillInStackTrace());
        }

        columnID.setCellValueFactory(new PropertyValueFactory<>("ID"));
        columnFirmenName.setCellValueFactory(new PropertyValueFactory<>("FirmenName"));

        columnMitarbeiter_ID.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID"));
        columnVorname.setCellValueFactory(new PropertyValueFactory<>("Vorname"));
        columnNachname.setCellValueFactory(new PropertyValueFactory<>("Nachname"));
        columnFirmen_ID.setCellValueFactory(new PropertyValueFactory<>("Firmen_ID"));

        columnProdukt_ID.setCellValueFactory(new PropertyValueFactory<>("Produkt_ID"));
        columnProdukt.setCellValueFactory(new PropertyValueFactory<>("Produkt"));

        tableFirmen.setItems(null);
        tableFirmen.setItems(data1);

        tableUser.setItems(null);
        tableUser.setItems(data);

        tableProdukt.setItems(null);
        tableProdukt.setItems(data2);

    }

Ich habe keine Ahnung ob das nur ansatzweise so richtig ist. Problem nur hier wieder ich kann meiner Tabelle keine Column zuweisen weil diese halt schon in einer anderen Tabelle benutzt werden. Möchte jetzt aber nicht für die gleichen Daten die in die gleiche Tabelle (Tabelle steht nur an einem anderen Platz) die daten neu definieren müssen.
 

lam_tr

Top Contributor
Da bin ich wieder 😁
Habe mich jetzt umentschieden das ganze mit einer Dop Down Box zu machen bedeutet ein Drop Dwon menü für die Firmen und wenn ich dort eine Firma asuwähle wird mir in der tabelle daneben dann alle Informationen zu dieser Firma (Mitarbeiter,Produkte) angezeigt.
Ich komme aber weider zum gleichen Problem mein code sieht jetzt so aus:

Java:
 //DropDown Firmen
    @FXML
    public void dropdownFirmen (ActionEvent event){
        Connection conn = DBConnection.getInstance().getCon();
        String auswahlfirma = (String) choiceBoxFirma.getSelectionModel().getSelectedItem();

        try{
            data=FXCollections.observableArrayList();
            data1=FXCollections.observableArrayList();
            data2=FXCollections.observableArrayList();

            ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frima F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID " +
                    "JOIN Produkte P ON P.ID=M.ID WHERE F.Name IS LIKE '%"+auswahlfirma+"%'");
            while (rs.next()){
                data1.add(new FirmenDetails(rs.getInt(1),rs.getString(2)));
                data.add(new UserDetails(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getInt(4)));
                data2.add(new ProduktDetails(rs.getInt(1),rs.getString(2)));
            }
            rs.close();

            if (conn != null && conn.isClosed()) {
                System.out.println("Connected");
            } else {
                System.out.println("Connection lost");
            }
        }catch(Exception e){
            System.out.println(e.fillInStackTrace());
        }

        columnID.setCellValueFactory(new PropertyValueFactory<>("ID"));
        columnFirmenName.setCellValueFactory(new PropertyValueFactory<>("FirmenName"));

        columnMitarbeiter_ID.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID"));
        columnVorname.setCellValueFactory(new PropertyValueFactory<>("Vorname"));
        columnNachname.setCellValueFactory(new PropertyValueFactory<>("Nachname"));
        columnFirmen_ID.setCellValueFactory(new PropertyValueFactory<>("Firmen_ID"));

        columnProdukt_ID.setCellValueFactory(new PropertyValueFactory<>("Produkt_ID"));
        columnProdukt.setCellValueFactory(new PropertyValueFactory<>("Produkt"));

        tableFirmen.setItems(null);
        tableFirmen.setItems(data1);

        tableUser.setItems(null);
        tableUser.setItems(data);

        tableProdukt.setItems(null);
        tableProdukt.setItems(data2);

    }

Ich habe keine Ahnung ob das nur ansatzweise so richtig ist. Problem nur hier wieder ich kann meiner Tabelle keine Column zuweisen weil diese halt schon in einer anderen Tabelle benutzt werden. Möchte jetzt aber nicht für die gleichen Daten die in die gleiche Tabelle (Tabelle steht nur an einem anderen Platz) die daten neu definieren müssen.
Ich verstehe hier dein Problem überhaupt nicht, jede Column eine eindeutige id zuzuweisen soll doch das Ganze eigentlich lösen oder?

wenn ich zum Beispiel in der Tabelle Firmen und in der Tabelle die column Mitarbeiter habe, dann kann ich doch wie folgt definieren?
- columnFirmenMitarberterVorname
- columnFirmenMitarberterFamilienname
- columnUserMitarberterVorname
- columnUserMitarberterFamilienname
 

Zakon

Bekanntes Mitglied
Ja aber genau das wollte ich ja umgehen das ich quasi eine class für mitarbeiter schreibe eine für Firma und eine für produkt und diese dann immer nur in der Methode mit einander verbinde 🤔
Habe das jetzt so geschrieben:
[CODE lang="java" title="Controller Klasse"] //DropDown Firmen
@FXML
public void dropdownFirmen (ActionEvent event){
Connection conn = DBConnection.getInstance().getCon();
String auswahlfirma= (String) comboBoxFirma.getValue();

try{
dataall=FXCollections.observableArrayList();
ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frima F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID " +
"JOIN Produkte P ON P.ID=M.ID WHERE F.Name IS LIKE '%"+auswahlfirma+"%'");
while (rs.next()){
dataall.add(new allDetails(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4),
rs.getString(5),rs.getInt(6),rs.getInt(7),rs.getString(8)));
}
rs.close();

if (conn != null && conn.isClosed()) {
System.out.println("Connected");
} else {
System.out.println("Connection lost");
}
}catch(Exception e){
System.out.println(e.fillInStackTrace());
}

columnID2.setCellValueFactory(new PropertyValueFactory<>("ID"));
columnFirmenName2.setCellValueFactory(new PropertyValueFactory<>("FirmenName"));

columnMitarbeiter_ID2.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID"));
columnVorname2.setCellValueFactory(new PropertyValueFactory<>("Vorname"));
columnNachname2.setCellValueFactory(new PropertyValueFactory<>("Nachname"));
columnFirmen_ID2.setCellValueFactory(new PropertyValueFactory<>("Firmen_ID"));

columnProdukt_ID2.setCellValueFactory(new PropertyValueFactory<>("Produkt_ID"));
columnProdukt2.setCellValueFactory(new PropertyValueFactory<>("Produkt"));

tableall.setItems(null);
tableall.setItems(dataall);


}[/CODE]

[CODE lang="java" title="Details Klasse"]public class allDetails {

private final IntegerProperty ID2;
private final StringProperty FirmenName2;

private final IntegerProperty Mitarbeiter_ID2;
private final StringProperty Vorname2;
private final StringProperty Nachname2;
private final IntegerProperty Firmen_ID2;

private final IntegerProperty Produkt_ID2;
private final StringProperty Produkt2;

public allDetails(int ID2,String FirmenName2,int Mitarbeiter_ID2,String Vorname2,String Nachname2,int Firmen_ID2,int Produkt_ID2,String Produkt2) {
this.ID2 = new SimpleIntegerProperty(ID2);
this.FirmenName2 = new SimpleStringProperty(FirmenName2);

this.Mitarbeiter_ID2 = new SimpleIntegerProperty(Mitarbeiter_ID2);
this.Vorname2 = new SimpleStringProperty(Vorname2);
this.Nachname2 = new SimpleStringProperty(Nachname2);
this.Firmen_ID2 = new SimpleIntegerProperty(Firmen_ID2);

this.Produkt_ID2 = new SimpleIntegerProperty(Produkt_ID2);
this.Produkt2 = new SimpleStringProperty(Produkt2);
}[/CODE]
Unten an der Details klasse kommen noch Getter und Setter die habe ich aber mal weggelassen.

Problem jetzt nur ich bekomme immer fehlermeldungen:

Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: javafx.fxml.LoadException:
/C:/ude/svn/entwicklung/retail/Datenbank/out/production/Datenbank/Main/view.fxml

at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2707)
at javafx.fxml/javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2949)
at javafx.fxml/javafx.fxml.FXMLLoader.processImport(FXMLLoader.java:2793)
at javafx.fxml/javafx.fxml.FXMLLoader.processProcessingInstruction(FXMLLoader.java:2758)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2624)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3323)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3280)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3249)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3222)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3199)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3192)
at Main.Main.start(Main.java:13)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
... 1 more
Caused by: java.lang.ClassNotFoundException: com.gluonhq.charm.glisten.control.DropdownButton
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at javafx.fxml/javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:3017)
at javafx.fxml/javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:3006)
at javafx.fxml/javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2947)
... 20 more
Exception running application Main.Main

Process finished with exit code 1

Wobei oben ja steht das ich eine Exception in der start Method habe owbohl meinne start method immer funktioniert hat und ich da ran auch nichts geändert habe🤔

Danke aber schonmal für deine Hartnäkigkeit du gibst mir echt Hoffnung das hier noch irgendwie zu schaffen 😁
 

lam_tr

Top Contributor
Ja aber genau das wollte ich ja umgehen das ich quasi eine class für mitarbeiter schreibe eine für Firma und eine für produkt und diese dann immer nur in der Methode mit einander verbinde 🤔
Habe das jetzt so geschrieben:
[CODE lang="java" title="Controller Klasse"] //DropDown Firmen
@FXML
public void dropdownFirmen (ActionEvent event){
Connection conn = DBConnection.getInstance().getCon();
String auswahlfirma= (String) comboBoxFirma.getValue();

try{
dataall=FXCollections.observableArrayList();
ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frima F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID " +
"JOIN Produkte P ON P.ID=M.ID WHERE F.Name IS LIKE '%"+auswahlfirma+"%'");
while (rs.next()){
dataall.add(new allDetails(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4),
rs.getString(5),rs.getInt(6),rs.getInt(7),rs.getString(8)));
}
rs.close();

if (conn != null && conn.isClosed()) {
System.out.println("Connected");
} else {
System.out.println("Connection lost");
}
}catch(Exception e){
System.out.println(e.fillInStackTrace());
}

columnID2.setCellValueFactory(new PropertyValueFactory<>("ID"));
columnFirmenName2.setCellValueFactory(new PropertyValueFactory<>("FirmenName"));

columnMitarbeiter_ID2.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID"));
columnVorname2.setCellValueFactory(new PropertyValueFactory<>("Vorname"));
columnNachname2.setCellValueFactory(new PropertyValueFactory<>("Nachname"));
columnFirmen_ID2.setCellValueFactory(new PropertyValueFactory<>("Firmen_ID"));

columnProdukt_ID2.setCellValueFactory(new PropertyValueFactory<>("Produkt_ID"));
columnProdukt2.setCellValueFactory(new PropertyValueFactory<>("Produkt"));

tableall.setItems(null);
tableall.setItems(dataall);


}[/CODE]

[CODE lang="java" title="Details Klasse"]public class allDetails {

private final IntegerProperty ID2;
private final StringProperty FirmenName2;

private final IntegerProperty Mitarbeiter_ID2;
private final StringProperty Vorname2;
private final StringProperty Nachname2;
private final IntegerProperty Firmen_ID2;

private final IntegerProperty Produkt_ID2;
private final StringProperty Produkt2;

public allDetails(int ID2,String FirmenName2,int Mitarbeiter_ID2,String Vorname2,String Nachname2,int Firmen_ID2,int Produkt_ID2,String Produkt2) {
this.ID2 = new SimpleIntegerProperty(ID2);
this.FirmenName2 = new SimpleStringProperty(FirmenName2);

this.Mitarbeiter_ID2 = new SimpleIntegerProperty(Mitarbeiter_ID2);
this.Vorname2 = new SimpleStringProperty(Vorname2);
this.Nachname2 = new SimpleStringProperty(Nachname2);
this.Firmen_ID2 = new SimpleIntegerProperty(Firmen_ID2);

this.Produkt_ID2 = new SimpleIntegerProperty(Produkt_ID2);
this.Produkt2 = new SimpleStringProperty(Produkt2);
}[/CODE]
Unten an der Details klasse kommen noch Getter und Setter die habe ich aber mal weggelassen.

Problem jetzt nur ich bekomme immer fehlermeldungen:

Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: javafx.fxml.LoadException:
/C:/ude/svn/entwicklung/retail/Datenbank/out/production/Datenbank/Main/view.fxml

at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2707)
at javafx.fxml/javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2949)
at javafx.fxml/javafx.fxml.FXMLLoader.processImport(FXMLLoader.java:2793)
at javafx.fxml/javafx.fxml.FXMLLoader.processProcessingInstruction(FXMLLoader.java:2758)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2624)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3323)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3280)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3249)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3222)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3199)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3192)
at Main.Main.start(Main.java:13)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
... 1 more
Caused by: java.lang.ClassNotFoundException: com.gluonhq.charm.glisten.control.DropdownButton
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at javafx.fxml/javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:3017)
at javafx.fxml/javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:3006)
at javafx.fxml/javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2947)
... 20 more
Exception running application Main.Main

Process finished with exit code 1

Wobei oben ja steht das ich eine Exception in der start Method habe owbohl meinne start method immer funktioniert hat und ich da ran auch nichts geändert habe🤔

Danke aber schonmal für deine Hartnäkigkeit du gibst mir echt Hoffnung das hier noch irgendwie zu schaffen 😁
Du benutzt hier ein Control gluon charm, was für mobile Anwendungen gedacht ist

Caused by: java.lang.ClassNotFoundException: com.gluonhq.charm.glisten.control.DropdownButton

Tauscht dieser Control mal um.
 

Zakon

Bekanntes Mitglied
Ja danke die Fehlermeldungen sind weg. Nur jetzt habe ich kein DropdownMenü:rolleyes:
[CODE lang="java" highlight="11"]@FXML
private ChoiceBox<String> boxFirma;

private ObservableList<String> ListeFirma = FXCollections.observableArrayList("IT-Schmidt","IT-Larsen","Autohaus Krueger");


//DropDown Firmen
@FXML
public void dropdownFirmen (ActionEvent event){
Connection conn = DBConnection.getInstance().getCon();
boxFirma.setItems(ListeFirma);
String auswahlFirma = boxFirma.getValue();
try{
dataall=FXCollections.observableArrayList();
ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frima F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID " +
"JOIN Produkte P ON P.ID=M.ID WHERE F.Name IS LIKE '%"+auswahlFirma+"%'");
while (rs.next()){
dataall.add(new allDetails(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4),
rs.getString(5),rs.getInt(6),rs.getInt(7),rs.getString(8)));
}
rs.close();

if (conn != null && conn.isClosed()) {
System.out.println("Connected");
} else {
System.out.println("Connection lost");
}
}catch(Exception e){
System.out.println(e.fillInStackTrace());
}

columnID2.setCellValueFactory(new PropertyValueFactory<>("ID"));
columnFirmenName2.setCellValueFactory(new PropertyValueFactory<>("FirmenName"));

columnMitarbeiter_ID2.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID"));
columnVorname2.setCellValueFactory(new PropertyValueFactory<>("Vorname"));
columnNachname2.setCellValueFactory(new PropertyValueFactory<>("Nachname"));
columnFirmen_ID2.setCellValueFactory(new PropertyValueFactory<>("Firmen_ID"));

columnProdukt_ID2.setCellValueFactory(new PropertyValueFactory<>("Produkt_ID"));
columnProdukt2.setCellValueFactory(new PropertyValueFactory<>("Produkt"));

tableall.setItems(null);
tableall.setItems(dataall);

}[/CODE]

Obwohl ich das ganze in zeile 11 doch angegebaen habe 🤔
 

lam_tr

Top Contributor
Ja danke die Fehlermeldungen sind weg. Nur jetzt habe ich kein DropdownMenü:rolleyes:
[CODE lang="java" highlight="11"]@FXML
private ChoiceBox<String> boxFirma;

private ObservableList<String> ListeFirma = FXCollections.observableArrayList("IT-Schmidt","IT-Larsen","Autohaus Krueger");


//DropDown Firmen
@FXML
public void dropdownFirmen (ActionEvent event){
Connection conn = DBConnection.getInstance().getCon();
boxFirma.setItems(ListeFirma);
String auswahlFirma = boxFirma.getValue();
try{
dataall=FXCollections.observableArrayList();
ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM Frima F JOIN Mitarbeiter M ON F.ID=M.Firmen_ID " +
"JOIN Produkte P ON P.ID=M.ID WHERE F.Name IS LIKE '%"+auswahlFirma+"%'");
while (rs.next()){
dataall.add(new allDetails(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4),
rs.getString(5),rs.getInt(6),rs.getInt(7),rs.getString(8)));
}
rs.close();

if (conn != null && conn.isClosed()) {
System.out.println("Connected");
} else {
System.out.println("Connection lost");
}
}catch(Exception e){
System.out.println(e.fillInStackTrace());
}

columnID2.setCellValueFactory(new PropertyValueFactory<>("ID"));
columnFirmenName2.setCellValueFactory(new PropertyValueFactory<>("FirmenName"));

columnMitarbeiter_ID2.setCellValueFactory(new PropertyValueFactory<>("Mitarbeiter_ID"));
columnVorname2.setCellValueFactory(new PropertyValueFactory<>("Vorname"));
columnNachname2.setCellValueFactory(new PropertyValueFactory<>("Nachname"));
columnFirmen_ID2.setCellValueFactory(new PropertyValueFactory<>("Firmen_ID"));

columnProdukt_ID2.setCellValueFactory(new PropertyValueFactory<>("Produkt_ID"));
columnProdukt2.setCellValueFactory(new PropertyValueFactory<>("Produkt"));

tableall.setItems(null);
tableall.setItems(dataall);

}[/CODE]

Obwohl ich das ganze in zeile 11 doch angegebaen habe 🤔
Keine Ahnung, vielleicht import Problem.

Ich habe noch eine Sache gesehen. Du muss nicht jedes mal die Liste neu setzen bei TableView, wie hier:

Java:
  tableall.setItems(null);
  tableall.setItems(dataall);

Es ist ausreichen, wenn du jedes mal bevor die Daten holst, dataall.clear() machst und im Anschluss dataall.addAll(...). deine TableView wird geupdated sobald die Liste sich verändert.
 

Zakon

Bekanntes Mitglied
Ok danke für den Tipp und mit dem DropDown menü muss ich nochmal gucken habe nämlich alle möglichen Varianten ausprobiert und geht immer noch nicht :rolleyes:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ataria SQLite Werte aus zwei Tabellen zusammenführen Datenbankprogrammierung 8
C zwei Strings vergleichen Datenbankprogrammierung 13
ralfb1105 Oracle Zwei ojdbc Driver in einer Applikation? Datenbankprogrammierung 13
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
M SQLite Zwei Datenbanken synchronisieren Datenbankprogrammierung 8
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
AssELAss Oracle Wildcard-Suche über zwei Felder Datenbankprogrammierung 5
M Oracle XA Connect auf zwei Datenbankinstanzen | fertiges Tool verfügbar? Datenbankprogrammierung 0
K Zwei Datenbanken miteinander auf Unterschiede vergleichen Datenbankprogrammierung 2
C Entities zwischen zwei PersistenceUnits tauschen Datenbankprogrammierung 5
M MySQL größere von zwei Zahlen in Update Statement Datenbankprogrammierung 2
Consuelo Verbinden von zwei Tabellen, foreign key Datenbankprogrammierung 4
H SQL Abfrage - zwei tabellen vergleichen. Datenbankprogrammierung 2
D zwei gleichzeitige Connections Datenbankprogrammierung 2
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
J Mit einer Abfrage Worte suchen die in Zwei Tabellen enthalten sind Datenbankprogrammierung 5
N Zwei Spalten und Ihre Werte vergleichen Datenbankprogrammierung 3
P Insert into mit zwei Datenbanken Datenbankprogrammierung 3
G Inhalt eine Clob Feldes zw. zwei DB's kopieren Datenbankprogrammierung 2
W Zwei Fragen über JDBC und MySQL Datenbankprogrammierung 2
N Abfrage über zwei Datenbanken Datenbankprogrammierung 9
O HOW TO INSERT PRIMARY INTO ANOTHER TABLE AND USE IT AS FOREIGN KEY TO DISPLAY DATA IN A RELATIONSHIP Datenbankprogrammierung 3
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
D SQL-Statement Beziehungsfehler bei CREATE TABLE Datenbankprogrammierung 2
S Table per Class Datenbankprogrammierung 2
F Create Table - Habe ich eine schwache Entität erzeugt ? Datenbankprogrammierung 4
C Oracle DROP TABLE IF EXISTS Datenbankprogrammierung 4
L SQL Fehler (Table/View does not exist) Datenbankprogrammierung 17
I Access Datenbank in Table einlesen lassen Datenbankprogrammierung 2
M Derby/JavaDB Kleine DB mit Tabelle erweitern - Integrität - Alter-Table - Netbeans ... Datenbankprogrammierung 5
OnDemand Update table SET will nicht Datenbankprogrammierung 9
ruutaiokwu sql server t-sql: try/catch bei ALTER TABLE ? Datenbankprogrammierung 4
K Derby/JavaDB '<columnName>' is not a column in table or VTI '<value>'. Datenbankprogrammierung 12
J Java DB Neuen Eintrag am Anfang der Table Datenbankprogrammierung 6
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
P sql statement alter table foreign key Datenbankprogrammierung 4
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
R Select Statement als temporärer Table Datenbankprogrammierung 7
H MySQL Tabelle "Table" programmieren Datenbankprogrammierung 2
M MySQL Table in Jtable integrieren Datenbankprogrammierung 26
F H2:Wie kann man insert eine Reihe "int" wert als blob in table? Datenbankprogrammierung 12
M Insert in Table mit 250 Feldern Datenbankprogrammierung 2
M Bei HSQLDB etwas wie OPTIMIZE TABLE? Datenbankprogrammierung 2
X von myISAM auf MEMORY! ERROR 1114: Table full Datenbankprogrammierung 13
S Create Table mit PreparedStatement Datenbankprogrammierung 2
M Vor CREATE TABLE Datenbanknamen festlege Datenbankprogrammierung 4
S insert into table Datenbankprogrammierung 8
M Create Table und setString Datenbankprogrammierung 2
M Create Table Datenbankprogrammierung 8
X SHOW TABLE STATUS FROM xxxx Datenbankprogrammierung 2
T CREATE TABLE in Access DB Datenbankprogrammierung 2
B datentyp boolean bei create table Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben