NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Tableview javafx update mysql

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
trantanh
Člen
Avatar
trantanh:18.1.2016 11:58

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.1.2016 11:58
Avatar
Odpovídá na trantanh
Petr Štechmüller:18.1.2016 12:15

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.1.2016 12:15
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
trantanh
Člen
Avatar
Odpovídá na Petr Štechmüller
trantanh:18.1.2016 12:36

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.1.2016 12:36
Avatar
Odpovídá na trantanh
Petr Štechmüller:18.1.2016 12:40

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.1.2016 12:40
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
trantanh
Člen
Avatar
Odpovídá na Petr Štechmüller
trantanh:18.1.2016 12:46

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.1.2016 12:46
Avatar
Odpovídá na trantanh
Petr Štechmüller:18.1.2016 12:49

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
18.1.2016 12:49
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
trantanh
Člen
Avatar
Odpovídá na Petr Štechmüller
trantanh:18.1.2016 12:52

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

 
Nahoru Odpovědět
18.1.2016 12:52
Avatar
Odpovídá na trantanh
Petr Štechmüller:18.1.2016 12:55

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

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

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.1.2016 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.