Diskuze: Tableview javafx update mysql
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, takhle se to nedělá. Musíš si vytvořit nějaký datový model,
který bude obsahovat informace. Pak řekneš tabulce, ať nastaví sloupečky
podle datového modelu. Aktualizace se pak provádí automaticky na pozadí
tím, že měníš datový model.
Tady posílám příklad, ve kterém jsem řešil stejnou věc.
https://github.com/stechy1/tabulka
diky radu, ale ty tam nemas pripojeny k databazi. Delal jsem podle navodu
plus navic pripojeni k databazi, vytvoril jsem datovy model Product, pak pres
ProductDataAccessor se pripojim k databazi.
pro zobrazeni data v tabulce jsem si vytvoril metodu
public ObservableList<Product> getProductList() throws SQLException {
String setQuery = "SELECT * FROM `products` JOIN `categories` ON `category_id` = categories.id";
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery(setQuery);
ObservableList<Product> data = FXCollections.observableArrayList();
while (rs.next()) {
String name = rs.getString("name");
String price = rs.getString("price");
String barcode = rs.getString("barcode");
String dph = rs.getString("dph");
String quantity = rs.getString("quantity");
String category = rs.getString("categories.name");
Product product = new Product(name, price, barcode, dph, category, quantity);
data.add(product);
}
return data;
}
pro zobrazeni data
productTable.setItems(productData.getProductList());
pro pridani data
public void addProduct(String name, String price, String barcode, String quantity, int idCategory) throws SQLException {
String setQuery = "INSERT INTO products(name, price, barcode,quantity,category_id, count_sale) VALUES(?,?,?,?,?,?)";
query = (PreparedStatement) connection.prepareStatement(setQuery);
query.setString(1, name);
query.setString(2, price);
query.setString(3, barcode);
query.setString(4, quantity);
query.setInt(5, idCategory);
query.setInt(6, 0);
query.execute();
System.out.println("success!! :D");
}
Ono se data prida do databazi, ale nezobrazi se az po vypnuti a zapnuty
aplikace tak se tam zobrazi
zkousel jsem tam dat
productTable.getItems().clear();
try {
productTable.getItems().addAll(productData.getProductList());
} catch (SQLException ex) {
Logger.getLogger(StoreController.class.getName()).log(Level.SEVERE, null, ex);
}
hlasi mi chybu
Exception in thread "JavaFX Application Thread"
java.lang.UnsupportedOperationException pak nevim co s tim
Dobře, vidim metodu addProduct, která ti to přidá pouze do databáze. Kde máš volání přidání produktu do datového modelu?
potom volam
productTable.getItems().clear();
co vycisti tabulku , a pridam tam data znova
productTable.getItems().addAll(productData.getProductList());
ale nefunguje to
Tabulku vůbec nečisti, to je zbytečný. Díval jsi se pořádně na ten můj příklad, jak tam přidávám novou položku? Žádné mazání dat z tabulky tam není. Musíš si představit, že tabulka pouze zobrazuje data, která jsou uložená v modelu. Takže musíš manipulovat pouze s modelem a ne s tabulkou.
uz jsem to asi pochopil, diky moc, jdu to vyzkouset
tak jsem to vyzkousel.
productData.addProduct(nameTextField.getText(), df.format(value), barcodeTextField.getText(), quantityTextField.getText(), getId);
data.add(new Product(nameTextField.getText(), df.format(value), barcodeTextField.getText(), quantityTextField.getText()));
productTable.setItems(null);
productTable.setItems(data);
na konci jsem musel pridat
productTable.setItems(null);
productTable.setItems(data);
Pak se to zobrazi v tabulce, ale nefunguje uz vyhledavani produktu
Zobrazeno 9 zpráv z 9.