Diskuze: Tableview javafx update mysql

Java Java Tableview javafx update mysql

Avatar
trantanh
Člen
Avatar
trantanh:

ahoj, jak resite update nebo-li refresh tabulku pri pridani data do tabulky ?
zkousel jsem googlit http://stackoverflow.com/…efresh-items

 tableView.getColumns().get(0).setVisible(false);
 tableView.getColumns().get(0).setVisible(true);

productTable.getItems().clear();
productTable.getItems().addAll(newProducts);

nic z toho mi nefunguje, mate nekdo lepsi napad jak to vyresit? uz to resim 1 mesic :(

 
Odpovědět 18. ledna 11:58
Avatar
Odpovídá na trantanh
Petr Štechmüller:

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

Nahoru Odpovědět 18. ledna 12:15
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
trantanh
Člen
Avatar
Odpovídá na Petr Štechmüller
trantanh:

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 :D
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.Unsup­portedOperati­onException pak nevim co s tim :-(

 
Nahoru Odpovědět 18. ledna 12:36
Avatar
Odpovídá na trantanh
Petr Štechmüller:

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?

Nahoru Odpovědět 18. ledna 12:40
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
trantanh
Člen
Avatar
Odpovídá na Petr Štechmüller
trantanh:

potom volam

productTable.getItems().clear();

co vycisti tabulku , a pridam tam data znova

productTable.getItems().addAll(productData.getProductList());

ale nefunguje to :-(

 
Nahoru Odpovědět 18. ledna 12:46
Avatar
Odpovídá na trantanh
Petr Štechmüller:

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.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 18. ledna 12:49
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
trantanh
Člen
Avatar
Odpovídá na Petr Štechmüller
trantanh:

uz jsem to asi pochopil, diky moc, jdu to vyzkouset :)

 
Nahoru Odpovědět 18. ledna 12:52
Avatar
Odpovídá na trantanh
Petr Štechmüller:

Super, tak pak napiš, jestli Ti to funguje.

Nahoru Odpovědět 18. ledna 12:55
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
trantanh
Člen
Avatar
trantanh:

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 :D :D

 
Nahoru Odpovědět 18. ledna 14:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.