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

时间:2016-11-29 10:01:28

标签: java mysql while-loop resultset

我试图制作一个名为Overeenkomst的TableView,它有一个ID和另外两个来自2个名为Gevonden和Vermiste的表的ID。

嘲笑是,一旦调用ID Overeenkomst,它检查其他2个ID是什么,检查来自其他表的那两个表Gevonden和Vermiste的值,并将这些值发送回javafile并最终一个FXML文件。

我试图在while循环中创建一个ResultSet,并认为它将从另一个表循环正确的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")); 

然后就行了。但问题是他们没有表现出正确的价值观。

我在Stackoverflow上看了一段时间并没有找到我正在寻找的答案,所以我希望你们能帮助我。

感谢提前帮助

1 个答案:

答案 0 :(得分:0)

正如e4c5的评论所说,你应该使用join来链接你的表,例如:

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/