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

    Jtable popolata con la stessa riga rietuta

    Ciao a tutti,
    Ho un problema con una jTable...
    Io prima eseguo una SELECT in un database, e poi cerco di inserire il risultato in una jTable.
    La query funziona perfettamente e se stampo i vettori con println, non c'è nesun problema (DOVE HO SCRITTO ******* QUI ******* nel commento del codice)....
    Quando invece li inserisco in tabella, vedo lo stesso vettore ripetuto n volte....

    codice:
    class ItemChangeListener implements ItemListener{
            public void itemStateChanged(ItemEvent e){
                if (e.getStateChange() == ItemEvent.SELECTED){
                    cant = e.getItem().toString();
                    try {
                        Connection con = DriverManager.getConnection(URL);
                        SQL = "Select Ore FROM Cantiere where nome = '" + cant + "'";
                        Statement stm = con.createStatement();
                        ResultSet rs = stm.executeQuery(SQL);
                        rs.next();
                        ore.setText(rs.getString("Ore"));
                        Connection conn = DriverManager.getConnection(URL);
                        Statement sstm = conn.createStatement();
                        SQL = "SELECT materiale.Codice , materiale.Descrizione , acquisto.tot , materiale.mef, materiale.luc, materiale.alt , bolla.ditta FROM materiale,acquisto,cantiere,bolla WHERE materiale.Codice = acquisto.cod AND acquisto.nbo = bolla.num AND bolla.Cantiere = '" + cant + "'";
                        ResultSet nrs = sstm.executeQuery(SQL);
                        Vector v = new Vector();
                        int j = 0 ;
                        data.setRowCount(0);
                        while(nrs.next()){
                            v.clear();
                            v.add(nrs.getString("materiale.Codice"));
                            v.add(nrs.getString("materiale.Descrizione"));
                            v.add(nrs.getString("acquisto.tot"));
                            if (nrs.getString("bolla.ditta").equals("Lucciola")){
                                v.add(nrs.getString("materiale.luc"));
                            } else if (nrs.getString("bolla.ditta").equals("Meff")) {
                                v.add(nrs.getString("materiale.mef"));
                            } else {
                                v.add(nrs.getString("materiale.alt"));
                            }
                            //    *********** QUI ****************
                            data.addRow(v);
                            j++;
                        }
                        jTable1.setModel(data);
                        con.close();
                        conn.close();
                    } catch (SQLException ex) {
                        Logger.getLogger(vis_cantiere.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        }
    Dove sto' sbagliando??? Mi sembra assurdo....

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sogeking_87 Visualizza il messaggio
    Dove sto' sbagliando??? Mi sembra assurdo....
    Ad ogni ciclo devi istanziare un nuovo Vector per la riga ..... non riusare lo stesso identico Vector pulendolo banalmente con clear().

    Se riusi lo stesso identico oggetto Vector, nel Vector data principale avrai N riferimenti allo stesso identico Vector, che contiene le colonne dell'ultima riga. E ovviamente non è corretto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie mille! Concettualmente non ho ben capito perchè! Pero' funziona tutto alla grande!
    Grazie ancora!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sogeking_87 Visualizza il messaggio
    Concettualmente non ho ben capito perchè!
    Con data.addRow(v); aggiungevi nel Vector data N riferimenti allo stesso identico oggetto Vector che era uno solo, istanziato prima del while.

    codice:
       Vector
    	data
      +------+
    0 |      |------+-----> Vector v
      +------+      |
    1 |      |------+
      +------+      |
    2 |      |------+
      +------+      |
      | .... |------+
        ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Grazie mille!!! Tutto chiaro!!!
    Ultima modifica di Sogeking_87; 06-11-2013 a 17:53

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.