Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Popolare una TableModel con dati presi da una jQuery

    Ciao a tutti... Dovrei riempire una tabella con dati presi da una query...
    La query funziona alla grande e se inserisco dei Sytem.out.println vedo che è tutto ok...
    Ma la mia tabella viene popolata con una sola riga!
    Come mai?!

    codice:
    conn = DriverManager.getConnection(URL);
                SQL = "SELECT * FROM MATERIALE";
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(SQL);
                TableModel data = jTable1.getModel();
                int row = 0;
                while(rs.next()){
                    String c = rs.getString("Codice");
                    data.setValueAt(c, row, 0);
                    String d = rs.getString("Descrizione");
                    data.setValueAt(d, row, 1);
                    Double l = rs.getDouble("Prezzo Lucciola");
                    data.setValueAt(l, row, 2);
                    Double m = rs.getDouble("Prezzo Meff");
                    data.setValueAt(m, row, 3);
                    Double a = rs.getDouble("Prezzo Altri");
                    data.setValueAt(a, row, 4);
                    row++;
                }
                jTable1.setModel(data);
                conn.close();
    Grazie per l'attenzione!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Il metodo setValueAt() serve a modificare il valore di una cella di una riga esistente... se la riga non esiste (quando fai "row++" vai su una riga inesistente) non succede nulla (o meglio, viene sicuramente sollevata una eccezione, ma dal punto di vista "visivo" non accade nulla)... perchè il TableModel quella riga non ce l'ha.

    Se devi aggiungere una riga, tutto dipende dal TableModel che hai usato per la JTable. Il DefaultTableModel, ad esempio, dispone di un metodo "addRow()" che si occupa di aggiungere la riga e notificare la tabella. Se hai un tuo TableModel, dovrai provvedere a dotarlo di un metodo simile. Il metodo dovrebbe prendere come parametro la nuova riga (tutta, completa) e notificare la tabella, usando fireTableRowsInserted() (sempre ammesso che il tuo TableModel derivi in qualche modo da AbstractTablelModel).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ho risolto con la classe Default table mode!
    Grazie mille!
    Ho un'altra domanda pero'...
    Nel mio progetto ho due form... Il primo serve ad inserire un record nella tabella all'interno del database (INSERT TO) e l'altro serve a visualizzare l'intera tabella in una jtable (SELECT FROM)... Il mio problema è che se inserisco un record, e poi vado a leggere la tabella, non vedo i dati appena inseriti... Se chiudo l'applicazione e la riapro, invece, c'è tutto... Come mai? Tengo a precisare che io apro una nuova connessione al database prima di ogni Query , e la chiudo subito dopo...
    Grazie a tutti ....

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Senza vedere il codice è difficile capire cosa c'è che non va...
    Comunque: nuovo problema -> nuova discussione
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Finisco qui dato che ci siamo.
    Praticamente da una parte dell'applicazione faccio un Insert to nella tabella materiali...
    codice:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            cod = txt_cod.getText();
            des = txt_des.getText();
            luc = Double.parseDouble(txt_luc.getText());
            mef = Double.parseDouble(txt_mef.getText());
            alt = Double.parseDouble(txt_alt.getText());  
            Connection conn;
            final String URL = "jdbc:mysql://localhost:3306/general electric?user=root&password=rapaic";
            String SQL;
            try{       
                conn = DriverManager.getConnection(URL);
                SQL = "INSERT INTO materiale VALUES (?,?,?,?,?)";
                PreparedStatement SQLPreparedStatement;
                SQLPreparedStatement = conn.prepareStatement(SQL);
                SQLPreparedStatement.setString(1, cod);
                SQLPreparedStatement.setString(2, des);
                SQLPreparedStatement.setDouble(3, luc);
                SQLPreparedStatement.setDouble(4, mef);
                SQLPreparedStatement.setDouble(5, alt);
                SQLPreparedStatement.executeUpdate();
                conn.close();
            } catch (Exception ex) {
                    System.out.println(ex.getMessage());
            }
            txt_cod.setText("0");
            txt_des.setText("");
            txt_luc.setText("0.00");
            txt_mef.setText("0.00");
            txt_alt.setText("0.00");    
        }
    Mentre da un'altra parte mostro la tabella in una jtable come segue...

    codice:
    public int pop() {
            Connection conn;
            final String URL = "jdbc:mysql://localhost:3306/general electric?user=root&password=rapaic";
            String SQL;
            try{
                conn = DriverManager.getConnection(URL);
                SQL = "SELECT * FROM MATERIALE";
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(SQL);
                DefaultTableModel data = (DefaultTableModel) jTable1.getModel();
                int row = 0;
                while(rs.next()){
                    String c = rs.getString("Codice");
                    Vector v = new Vector();
                    data.addRow(v);
                    data.setValueAt(c, row, 0);
                    String d = rs.getString("Descrizione");
                    data.setValueAt(d, row, 1);
                    Double l = rs.getDouble("Prezzo Lucciola");
                    data.setValueAt(l, row, 2);
                    Double m = rs.getDouble("Prezzo Meff");
                    data.setValueAt(m, row, 3);
                    Double a = rs.getDouble("Prezzo Altri");
                    data.setValueAt(a, row, 4);
                    row++;
                }
                jTable1.setModel(data);
                conn.close();
            } catch (Exception ex) {
                    System.out.println(ex.getMessage());
            }
            return 1;
        }
    Entrambe le parti sono corrette... Ma se le faccio entrambe non vedo il record inserito con la prima parte di codice... Se chiudo tutto e riapro invece... Il nuovo record mi compare nella tabella dimostrando cosi' che è stato effettivamente inserito... Il mio problema è che vorrei non dover riavviare sempre l'applicazione...
    Grazie per la pazienza...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.