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

    [Java] Query mysql, evento e duplicazione righe JTable

    ho questa jtable:
    codice:
    tableData = new javax.swing.JTable();
    
    tableData.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {},
        new String [] {
            "Book name", "Author", "Editor", "ISBN", "Price", "Note"
        }
    ) {
        boolean[] canEdit = new boolean [] {
            false, false, false, false, false, false
        };
    
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    }
    );
    tableData.setAutoCreateRowSorter(true);
    si carica all'apertura della finestra.
    ho messo poi questo evento al click su una label che richiama il codice per eseguire la query (lo stesso in apertura di finestra):
    codice:
    public class DoSelect {
    
        private static Connection conn;
        private static Statement stmt;
        private static ResultSet rs;
    
        public static void leggi() throws ClassNotFoundException, SQLException {
            conn = DoConnection.getConnection();
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT name, author_name, editor_name, price, isbn, note FROM book INNER JOIN author ON book.author_id=author.author_id INNER JOIN editor ON book.editor_id=editor.editor_id");
            while (rs.next()) {
                String name = rs.getString("name");
                String author = rs.getString("author_name");
                String editor = rs.getString("editor_name");
                String price = rs.getString("price");
                String isbn = rs.getString("isbn");
                String note = rs.getString("note");
                Object[] riga = {name, author, editor, price, isbn, note};
                ((DefaultTableModel) FramePrincipale.getTable().getModel()).addRow(riga);
            }
            rs.close();
            stmt.close();
        }
    }
    il problema è che la tabella aggiunge i dati invece di aggiornarli solamente.
    quindi succede che ad ogni click sulla label i dati si duplichino
    come posso per effettuare solo un aggiornamento??

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    per forza, glielo dici tu di aggiungere le righe ogni volta (addRow non fa altro, lo dice anche il nome). Per ottenere quello che vuoi tu, o ricrei il DataModel e glielo appiccichi, oppure sul DataModel corrente, invochi setDataVector - nella versione che più ti piace:

    http://download.oracle.com/javase/6/...ableModel.html
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Se ogni volta è come se facessi un refresh, risolveresti cancellando tutte le righe e reinserendole:

    codice:
    DefaultTableModel model = tabella.getModel();
    
    while (model.getRowCount()>0){
    model.removeRow(0);
    }
    
    ...
    
    reinserisci le righe
    lolide
    Java Programmer

    Informati

  4. #4
    ho modificato la jtable così:
    codice:
    javax.swing.table.DefaultTableModel model = new javax.swing.table.DefaultTableModel(
                new Object [][] {},
                new String [] {
                    "Book name", "Author", "Editor", "ISBN", "Price", "Note"
                }
            );
            tableData.setModel(model);
            tableData.setAutoCreateRowSorter(true);
    .....
        boolean[] canEdit = new boolean[]{
            false, false, false, false, false, false
        };
    
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit[columnIndex];
        }
    .......
        private void labelTableMouseClicked(java.awt.event.MouseEvent evt) {                                        
            try {
                DefaultTableModel newModel = (DefaultTableModel) tableData.getModel();
                while (newModel.getRowCount() > 0) {
                    newModel.removeRow(0);
                }
                DoSelect.leggi();
                textCount.setText(Integer.toString(DoCount.conta()));
                textPrice.setText(Integer.toString(DoSum.sumPrice()));
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(this, ex.getMessage());
            } catch (ClassNotFoundException ex) {
                JOptionPane.showMessageDialog(this, ex.getMessage());
            }
        }
    parrebbe funzionare.
    con una connessione più veloce potrei testare meglio.
    per ora grazie a entrambi!!

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.