Друзья, привет, вопрос, который решить не могу уже 3-й день. Я новичок, код подчистил как мог, большинства функционала программы не показывал, дабы не засорять сообщение, я уверен ,что ошибка кроется в этих методах, но не могу её найти.
Есть метод requestQuery(String query), он подключается к классу базе данных SQLite через класс SQLite (не показал, т.к. там ничего особо нет) , класс Product типичный POJO(с гетерами и сеттерами) класс , есть 2 кнопки одна btnBurgerKing , которая вызывает файл BurgerKing.fxml , а другая btnKFC , которая тоже вызывает свой файл KFC.fxml , и метод хорошо работает, забирает из БД все табличные значения, но погружает в одну TableView обе таблицы , а не в каждую свою .В каждом fxml-файле есть TableView с одним и тем-же id.
Не понимаю что не так?
Const.REQUEST_BURGER_KING = "SELECT * FROM burger_king"
Const.REQUEST_KFC = "SELECT * FROM kfc"
@Override
public void initialize(URL location, ResourceBundle resources) {
requestQuery(Const.REQUEST_BURGER_KING);
requestQuery(Const.REQUEST_KFC);
tabColName.setCellValueFactory(new PropertyValueFactory<>("name"));
tabColProtein.setCellValueFactory(new PropertyValueFactory<>("protein"));
tableColFat.setCellValueFactory(new PropertyValueFactory<>("fats"));
tableColCarb.setCellValueFactory(new PropertyValueFactory<>("carbs"));
tableColCal.setCellValueFactory(new PropertyValueFactory<>("calories"));
tableViewProducts.setItems(tableProductData);
}
private void requestQuery(String query){
try {
SQLiteClient.connectDB();
SQLiteClient.resultSet = SQLiteClient.connection.createStatement().executeQuery(query);
while (SQLiteClient.resultSet.next()) {
Product product = new Product();
product.name.set(SQLiteClient.resultSet.getString(Const.TABLE_NAME));
product.protein.set(SQLiteClient.resultSet.getDouble(Const.TABLE_PROTEIN));
product.fats.set(SQLiteClient.resultSet.getDouble(Const.TABLE_FATS));
product.carbs.set(SQLiteClient.resultSet.getDouble(Const.TABLE_CARBS));
product.calories.set(SQLiteClient.resultSet.getInt(Const.TABLE_CALORIES));
tableProductData.add(product);
}
SQLiteClient.closeDB();
} catch (SQLException | ClassNotFoundException e) {
e.getStackTrace();
}
}
}
метод , который открывает по кнопке из другого класса :
productWindow - это путь к файлу fxml.
private void openNewProductWindow(Button btn, String productWindow, String windowTitle) {
btn.setOnAction(event -> {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource(productWindow));
try {
loader.load();
} catch (IOException e) {
e.printStackTrace();
}
Parent root = loader.getRoot();
Stage stage = new Stage();
stage.setTitle(windowTitle);
stage.setScene(new Scene(root));
stage.showAndWait();
});
}
Объявление метода openNewProductWindow :
@FXML
void initialize() {
openNewProductWindow(btnBurgerKing,Const.BURGER_KING_WINDOW,"Burger King menu");
openNewProductWindow(btnKFC,Const.KFC_WINDOW,"Kentucky Fried Chicken");
}
Я уже и так и сяк, и методы по-другому переписывал и закрывал DB в разных местах, всё что получал, это то ,что таблица burger_king из DB SQLite открывалась в KFC.fxml
Отладчиком я проходился и увидел, что если метод принимает первым requestQuery(Const.REQUEST_BURGER_KING); , то даже если нажать на кнопку открытия окна KFC.fxml , открывается KFC.fxml , но TableView в любом случае сначала заполняет данными из таблицы burger_king и только потом заполняет данными kfc , хотя по идее должно быть что заполнилось только kfc.