java while 循环中的 ResultSet 出于某种原因不起作用

java ResultSet in a while loop doesnt work for some reason

我正在尝试制作一个名为 Overeenkomst 的 TableView,它有一个 ID 和来自 2 个不同 table 的 2 个其他 ID,分别称为 Gevonden 和 Vermiste。

技巧是,一旦调用了 ID Overeenkomst,它就会检查其他 2 个 ID 是什么,检查来自其他 table 的那 2 个 tables Gevonden 和 Vermiste 的值]s 并将这些值发送回 javafile 并最终发送到 FXML 文件。

我试图通过在 while 循环中创建一个 ResultSet 来做到这一点,并认为它会从另一个 table 循环正确的 ID 值,但它只能工作一次。在那之后它停止了。

Start.java

private void writeTableData() {
    Database database = new Database(
        "database",
        "localhost:3306",
        "root",
        " "
    );

    try {
        ResultSet resultOvereenkomst = database.executeQuery("SELECT * FROM testDatabase.Overeenkomst WHERE Gesloten = 1;");
        ResultSet resultGevonden = database.executeQuery("SELECT *  FROM testDatabase.Gevonden");




        while (resultOvereenkomst.next() && resultGevonden.next()) {
            Bagage bagage = new Bagage();
            bagage.setId(resultOvereenkomst.getInt("OvereenkomstID"));
            bagage.setDatum(resultOvereenkomst.getString("Datum"));

            ResultSet checkGevonden = database.executeQuery("SELECT Labelnummer, BagageType FROM testDatabase.Gevonden WHERE idGevonden = " + resultOvereenkomst.getInt("GevondenID") + ";" );

            bagage.setLabelNummer(checkGevonden.getInt("Labelnummer"));
            bagage.setBagageType(checkGevonden.getString("BagageType")); 
            geslotenData.add(bagage);

        }

    } catch (SQLException ex) {

    }

}

Bagage.java

public class Bagage extends Gebruiker{

private final SimpleIntegerProperty id = new SimpleIntegerProperty();
private final SimpleIntegerProperty gevondenID = new SimpleIntegerProperty();
private final SimpleIntegerProperty vermistID = new SimpleIntegerProperty();
private final SimpleStringProperty datum = new SimpleStringProperty();
private final SimpleIntegerProperty labelNummer = new SimpleIntegerProperty();
private final SimpleIntegerProperty vluchtNr = new SimpleIntegerProperty();
private final SimpleStringProperty bagageType = new SimpleStringProperty();
private final SimpleStringProperty tijd = new SimpleStringProperty();
private final SimpleStringProperty luchthaven = new SimpleStringProperty();
private final SimpleStringProperty bestemming = new SimpleStringProperty();
private final SimpleStringProperty merk = new SimpleStringProperty();
private final SimpleStringProperty kleur = new SimpleStringProperty();
private final SimpleStringProperty BijzondereKenmerken = new SimpleStringProperty();

//Setters
public void setId(int id){
    this.id.set(id);
}
public void setDatum(String datum){
    this.datum.set(datum);
}
public void setLabelNummer(int labelNummer){
    this.labelNummer.set(labelNummer);
}
public void setVluchtNr(int vluchtNr){
    this.vluchtNr.set(vluchtNr);
}
public void setBagageType(String bagageType){
    this.bagageType.set(bagageType);
}
public void setTijd(String tijd){
    this.tijd.set(tijd);
}
public void setLuchthaven(String luchthaven){
    this.luchthaven.set(luchthaven);
}
public void setBestemming(String bestemming){
    this.bestemming.set(bestemming);
}
public void setMerk(String merk){
    this.merk.set(merk);
}
public void setKleur(String kleur){
    this.kleur.set(kleur);
}
public void setBijzondereKenmerken(String bijzondereKenmerken){
    this.BijzondereKenmerken.set(bijzondereKenmerken);
}
public void setGevondenID(int gevondenID){
    this.gevondenID.set(gevondenID);
}
public void setVermistID(int vermistID){
    this.vermistID.set(vermistID);
}

//Getters
public Integer getId(){
    return id.get();
}
public String getDatum(){
    return datum.get();
}
public Integer getLabelNummer(){
    return labelNummer.get();
}
public Integer getVluchtNr(){
    return vluchtNr.get();
}
public String getBagageType(){
    return bagageType.get();
}
public String getTijd(){
    return tijd.get();
}
public String getLuchthaven(){
    return luchthaven.get();
}
public String getBestemming(){
    return bestemming.get();
}
public String getMerk(){
    return merk.get();
}
public String getKleur(){
    return kleur.get();
}
public String getBijzondereKenmerken(){
    return BijzondereKenmerken.get();
}
public Integer getVermistID(){
    return vermistID.get();
}
public Integer getGevondenID(){
    return gevondenID.get();
}

}

如果我删除这段代码:

ResultSet checkGevonden = database.executeQuery("SELECT Labelnummer, BagageType FROM testDatabase.Gevonden WHERE idGevonden = " + resultOvereenkomst.getInt("GevondenID") + ";" );

并将这两个更改为:

bagage.setLabelNummer(resultGevonden.getInt("Labelnummer"));
bagage.setBagageType(resultGevonden.getString("BagageType")); 

然后就可以了。但问题是它们没有显示正确的值。

我在 Whosebug 上看了一会儿,还没有找到我正在寻找的答案,所以我希望你们能帮助我。

感谢您的提前帮助

正如 e4c5 的评论所说,您应该使用连接到 link 您的表,例如:

private void writeTableData() {
Database database = new Database(
    "database",
    "localhost:3306",
    "root",
    " "
);

try {
    ResultSet resultOvereenkomst = database.executeQuery("SELECT * FROM testDatabase.Overeenkomst LEFT JOIN testDatabase.Gevonden ON Gevonden.idGevonden = Overeenkomst.GevondenID  WHERE Gesloten = 1;");

    while (resultOvereenkomst.next()) {
        Bagage bagage = new Bagage();
        bagage.setId(resultOvereenkomst.getInt("OvereenkomstID"));
        bagage.setDatum(resultOvereenkomst.getString("Datum"));
        bagage.setLabelNummer(checkGevonden.getInt("Labelnummer"));
        bagage.setBagageType(checkGevonden.getString("BagageType")); 
        geslotenData.add(bagage);
    }

} catch (SQLException ex) {

}
}

有关联接的更多信息:http://www.sql-join.com/