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

    aggiornare resultset da JTable

    salve a tutti sto cercando di realizzare un piccolo programma che si collega ad un db mysql.
    il programma legge i dati dal db e li mette in una JTable tramite un DataModel.
    Io vorrei da questa Jtable poter aggiornare i dati che sono nel database.

    cercando in rete ho letto che utilizzando il metodo updateRow() di resultset si puo aggiornare il valore del resulset (dichiarato in precedenza aggiornabile) e aggiornando cosi anche le tabelle del database. quello che pero non riesco a capire è il collegamento che c'è tra la JTable e il result set visto che nel mezzo c'è il datamodel....

    qualcuno sa chiarirmi le idee?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Tieni conto che quello che tu vedi attraverso la JTable è una "vista" di quello che c'è nel database, a questa è associato (come hai detto) il model con la lista dei dati che visualizzi.
    Ora se tu vuoi aggiornare quello che tu vedi (il punto più esterno) con quello che c'è sul db (In modo che le due cose coincidano) devi in parole povere prevedere un metodo che nell'ordine faccia:

    1. prendi il nuovo valore
    2. update della riga del database con il nuovo valore
    3. update della vista (in pratica aggiorni i dati nel model e chiami un firetabledatachanged), che può prevedere una nuova select.

    questo dovrebbe risolverti le cose.
    Attenzione: queste operazioni devono essere "atomiche", cioè se qualcosa va storto in qualche punto devi tornare ad una situazione in cui l'update non è stato fatto.
    RTFM Read That F*** Manual!!!

  3. #3
    ciao grazie per aver risposto ma non ho capito molto bene...
    nel mio dataModel ho gai implementato un metodo che aggiorna i valori di tale modello quando edito la tabella il codice della classe che ho scritto è questo:
    codice:
    import javax.swing.table.AbstractTableModel;
    import java.util.Vector;
    
    public class contattoDataModel extends AbstractTableModel
    {
        Vector <contatto> dati;
        String[] intestazioni;
        
        public contattoDataModel(){
            dati = new Vector<contatto>();
            intestazioni= new String[]{"Cognome","Nome","Indirizzo","Citta","Telefono"};
        }
        
        public contattoDataModel(Vector v){
            dati = new Vector<contatto>(v);
            intestazioni= new String[]{"Cognome","Nome","Indirizzo","Citta","Telefono"};
        }
        
        public int getRowCount(){
            return this.dati.size();
        }
        
        public int getColumnCount(){
            return intestazioni.length;
        }
        
        public String getColumnName(int indiceColonna){
            return intestazioni[indiceColonna];
        }
        
        public Object getValueAt(int indiceRiga, int indiceColonna){
            contatto riga = dati.elementAt(indiceRiga);
            switch (indiceColonna){
                case 0:
                    return riga.getCognome();
                  
                case 1:
                    return riga.getNome();
                   
                case 2:
                    return riga.getIndirizzo();
                    
                case 3:
                    return riga.getCitta();
                    
                case 4:
                    return riga.getTelefono();
                    
                }
            return null;
            }
            
        public void setValueAt(Object value, int indiceRiga, int indiceColonna){
            contatto riga = this.dati.elementAt(indiceRiga);
            String valore = (String)value;
            switch (indiceColonna){
                case 0:
                    riga.setCognome(valore);
                    break;
                case 1:
                    riga.setNome(valore);
                    break;
                case 2:
                    riga.setIndirizzo(valore);
                    break;
                case 3:
                    riga.setCitta(valore);
                    break;
                case 4:
                    riga.setTelefono(valore);
                    break;
                }
            }
            
       public boolean isCellEditable(int indiceRiga, int indiceColonna){
           return true;
        }
        
        public void aggiungoContatto(contatto... contatti){
            for(contatto Contatto : contatti){
                this.dati.add(Contatto);
            }
        }
    }
    con il metodo setValueAt() aggiorno i dati nel modello pero poi come faccio per passarli al db? devo fare ogni volta una query di update per ogni cella che edito?

    avevo letto che con il metodo updateXXX di resulset si puo aggiornare il resultset e con il metodo updateRow si riportano le modifiche fatte al resultset sul db senza dover passare le query....mi sembra di aver capito che si potesse fare lo stesso anche con l'inserimento di nuove righe e la cancellazione. solo che il testo non riporta esempi e poi come dicevamo i dati su cui lavoro da tabella si trovano nel modello... esiste un modo per far aggiornare anche anche il resulset?

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.