私のテーブルビューに問題があります。私のデータベースにアイテムを追加するたびに、それは私のテーブルビューに表示されますが、私はテーブルビューを閉じて再オープンした後にのみ表示されます。しかし、私はそれを追加した直後に私のテーブルビューに追加したいと思います。だから私はリフレッシュメソッドを作ったが、私はそこからエラーを取得しています。コードにコメントを追加しました。ここで問題がどこで発生するか説明しています。コンストラクタメソッドがなく、コンストラクタメソッドのエラーが発生したときのエラー
ここで私は削除している輸入品と
package packet;
public class DataControll implements Initializable {
private static Connection con;
private static Statement stat;
private PreparedStatement prep;
ResultSet rs = null;
private ObservableList<Toidubaas> toidudata;
public void eemaldaListist() {
}
public void lisaNupp(ActionEvent event) {
try {
String query = "INSERT OR IGNORE INTO Toiduinfo (Toidu, Kalorid, Valgud, Süsivesikud, Rasvad) VALUES(?, ?, ?, ?, ?)";
prep = con.prepareStatement(query);
prep.setString(1, lisaToit.getText());
prep.setInt(2, Integer.parseInt(lisaKcal.getText()));
prep.setInt(3, Integer.parseInt(lisaValk.getText()));
prep.setInt(4, Integer.parseInt(lisaSysi.getText()));
prep.setInt(5, Integer.parseInt(lisaRasv.getText()));
prep.execute();
prep.close();
} catch (Exception er) {
System.out.println(er.getMessage());
}
clearForm();
}
private void clearForm() {
lisaToit.clear();
lisaKcal.clear();
lisaValk.clear();
lisaSysi.clear();
lisaRasv.clear();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
toidudata = FXCollections.observableArrayList();
tbCal.setCellValueFactory(new PropertyValueFactory<Toidubaas, Integer>("rbCal"));
tbProt.setCellValueFactory(new PropertyValueFactory<Toidubaas, Integer>("rbProt"));
tbCarb.setCellValueFactory(new PropertyValueFactory<Toidubaas, Integer>("rbCarb"));
tbFat.setCellValueFactory(new PropertyValueFactory<Toidubaas, Integer>("rbFat"));
tbMeal.setCellValueFactory(new PropertyValueFactory<Toidubaas, String>("rbMeal"));
try {
con = DriverManager.getConnection("jdbc:sqlite:Fooditabel.sqlite");
stat = con.createStatement();
stat.executeUpdate(
"CREATE TABLE IF NOT EXISTS Toiduinfo (Toidu TEXT, Kalorid INTEGER, Valgud INTEGER, Süsivesikud INTEGER, Rasvad INTEGER)");
ResultSet rs = con.createStatement()
.executeQuery("SELECT Toidu, Kalorid, Valgud, Süsivesikud, Rasvad FROM Toiduinfo");
while (rs.next()) {
Toidubaas nt = new Toidubaas(); //if i add constructor method, im getting error here, saying the constructor is undefined
nt.rbMeal.set(rs.getString("Toidu"));
nt.rbCal.set(rs.getInt("Kalorid"));
nt.rbProt.set(rs.getInt("Valgud"));
nt.rbCarb.set(rs.getInt("Süsivesikud"));
nt.rbFat.set(rs.getInt("Rasvad"));
toidudata.add(nt);
}
tbTabelview.setItems(toidudata);
} catch (SQLException ex) {
System.out.println(ex.getMessage());
;
}
}
public void refreshTable() {
toidudata.clear();
try {
String query = "Select * FROM Toiduinfo";
prep = con.prepareStatement(query);
rs = prep.executeQuery();
while (rs.next()) {
toidudata.add(new Toidubaas( //Getting error here, if im not using constructor method, saying the method is undefined.
rs.getString("Toidu"),
rs.getInt("Kalorid"),
rs.getInt("Valgud"),
rs.getInt("Süsivesikud"),
rs.getInt("Rasvad")));
tbTabelview.setItems(toidudata);
}
prep.close();
} catch (Exception e2) {
}
}
}
@FXMLタグとは、コンストラクタメソッドを持つクラスです。私のプログラムがテーブルビューにデータベースデータを入力するように、コンストラクタメソッドがコメントアウトされていることに注意してください。
public class Toidubaas {
public SimpleIntegerProperty rbCal = new SimpleIntegerProperty();
public SimpleIntegerProperty rbProt = new SimpleIntegerProperty();
public SimpleIntegerProperty rbCarb = new SimpleIntegerProperty();
public SimpleIntegerProperty rbFat = new SimpleIntegerProperty();
public SimpleStringProperty rbMeal = new SimpleStringProperty();
//This is the constructor method
/*public Toidubaas(String sbMeal, Integer sbCal, Integer sbProt, Integer sbCarb, Integer sbFat) {
this.rbMeal = new SimpleStringProperty(sbMeal);
this.rbCal = new SimpleIntegerProperty(sbCal);
this.rbProt = new SimpleIntegerProperty(sbProt);
this.rbCarb = new SimpleIntegerProperty(sbCarb);
this.rbFat = new SimpleIntegerProperty(sbFat);
}*/
public String getRbMeal() {
return rbMeal.get();
}
public void setRbMeal(String v) {
rbMeal.set(v);
}
public Integer getRbCal() {
return rbCal.get();
}
public void setRbCal(Integer v) {
rbCal.set(v);
}
public Integer getRbProt() {
return rbProt.get();
}
public void setRbProt(Integer v) {
rbProt.set(v);
}
public Integer getRbCarb() {
return rbCarb.get();
}
public void setRbCarb(Integer v) {
rbCarb.set(v);
}
public Integer getRbFat() {
return rbFat.get();
}
public void setRbFat(Integer v) {
rbFat.set(v);
}
}
はあなたが合格しない第二のコンストラクタを作成します'public Toidubaas(){}' – XtremeBaumer
"しかし、そこからエラーが出ています" - そのエラーはどうなりますか?コンパイル時?例外?エラーメッセージには何が表示されますか? – JimmyB
@XtremeBaumerは、十分に異なるパラメータを持つ限り、各クラスに複数のコンストラクタを持つことができることに注意してください。必要に応じて宣言し、必要に応じてどちらか一方を使用してください。 – JimmyB