Mam program, który pobiera dane z bazy danych SQLite i wyświetla je w TableView. Nastepnie użytkownik wybrane dane może dodać do innego TableView. Potrzebuje teraz ten utworzony przez użytkownika TableView zapisać w pliku/bazie danych, tak ty przy kolejnym starcie programu móc je wczytać. Niestety, nie mogę znaleźć żadnych pomocnych informacji jak się za to zabrać, wszędzie pisze tylko o wczytywaniu danych z bazy do TableView, ale nie odwrotnie. Niżej zamieszczam działające do tej pory metody
wczytywanie danych z bazy danych
@FXML
private TableView<productData> tableProduct;
private ObservableList<productData> products;
@FXML
private TableView<productData> tableProduct2;
private void loadTypeDataFromDB(String type){
products = FXCollections.observableArrayList();
try {
PreparedStatement pst = conn.prepareStatement("SELECT name, kcal, protein, carb, fat FROM Products WHERE type=?");
pst.setString(1, type);
ResultSet rs = pst.executeQuery();
while(rs.next()){
products.add(new productData(rs.getString("name"), rs.getString("kcal"), rs.getString("protein"), rs.getString("carb"), rs.getString("fat")));
}
} catch (SQLException e) {
e.printStackTrace();
System.err.println(e);
}
colProduct.setCellValueFactory(new PropertyValueFactory<productData, String>("name"));
colKcal.setCellValueFactory(new PropertyValueFactory<productData, String>("kcal"));
colProtein.setCellValueFactory(new PropertyValueFactory<productData, String>("protein"));
colCarbs.setCellValueFactory(new PropertyValueFactory<productData, String>("carb"));
colFat.setCellValueFactory(new PropertyValueFactory<productData, String>("fat"));
tableProduct.setItems(null);
tableProduct.setItems(products);
}
metoda dodająca obiekt z jednego tableview do drugiego i przy okazji tworząca tablice w bazie i dodająca do niej ten obiekt
public void addMeal() {
productData selection = tableProduct.getSelectionModel().getSelectedItem();
if (selection != null) {
tableProduct2.getItems().add(new productData(selection.getName() + "(" + Float.parseFloat(weightField.getText()) + "g)", String.valueOf(Float.parseFloat(selection.getKcal())*(Float.parseFloat(weightField.getText())/100)), String.valueOf(Float.parseFloat(selection.getProtein())*(Float.parseFloat(weightField.getText())/100)), String.valueOf(Float.parseFloat(selection.getCarb())*(Float.parseFloat(weightField.getText())/100)), String.valueOf(Float.parseFloat(selection.getFat())*(Float.parseFloat(weightField.getText())/100))));
}
updateSummary();
String db = String.valueOf("uid" + userID + "date" + simpleDate.format(new Date()));
String query1 = "CREATE TABLE if not exists " + db + " (name TEXT, kcal FLOAT, protein FLOAT, carbs FLOAT, fat FLOAT)";
String query2 = "INSERT INTO " + db + " (name, kcal, protein, carbs, fat) VALUES (?, ?, ?, ?, ?)";
try {
PreparedStatement pst1 = conn.prepareStatement(query1);
pst1.executeUpdate();
PreparedStatement pst = conn.prepareStatement(query2);
pst.setString(1, selection.getName() + "(" + Integer.parseInt(weightField.getText()) + "g)");
pst.setString(2, String.valueOf(Float.parseFloat(selection.getKcal())*(Float.parseFloat(weightField.getText())/100)));
pst.setString(3, String.valueOf(Float.parseFloat(selection.getProtein())*(Float.parseFloat(weightField.getText())/100)));
pst.setString(4, String.valueOf(Float.parseFloat(selection.getCarb())*(Float.parseFloat(weightField.getText())/100)));
pst.setString(5, String.valueOf(Float.parseFloat(selection.getFat())*(Float.parseFloat(weightField.getText())/100)));
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(db);
}
Niestety problemy zaczynają się przy usuwaniu obiektów z tego TableView, mogą być np. dodane 2 obiekty o takiej samej nazwie, wtedy zostaną usunięte od razu wszystkie... Chciałbym więc po prostu etap dodania wszystkiego do bazy danych zrealizować inną metodą, która po prostu weźmie wszystkie elementy dodane przez użytkownika do TableView i zapisze je w bazie danych... mógły ktoś mnie naprowadzić jak się za to zabrać?