Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - jTable, DBUtils, quale tableModel usare?
Forum - Java - jTable, DBUtils, quale tableModel usare?

Avatar
bruno.demarini (Normal User)
Pro


Messaggi: 84
Iscritto: 22/03/2010

Segnala al moderatore
Postato alle 18:38
Giovedì, 11/09/2014
Ciao a tutti, vorrei chiedervi se il mio codice è corretto e come risolvere alcuni problemi. Devo visualizzare il contenuto della tabella Appuntamenti di un database locale MySql all'interno della jTable tableAppunt. Dopo aver trascinato la jTable sul form, inserisco nel costruttore del frame il seguente codice:
Listato 1:
Codice sorgente - presumibilmente Java

  1. public MainF() {
  2.     initComponents();
  3.    
  4.     try {
  5.       EseguiConnessione();
  6.      
  7.       stat = con.createStatement();
  8.      
  9.       rs = stat.executeQuery("Select IDAppuntamento, "
  10.               + "DataOra AS 'Data e ora', Prezzo, Done AS 'Fatto',"
  11.               + "CodCliente from Appuntamenti");
  12.        
  13.       tm = DbUtils.resultSetToTableModel(rs);
  14.      
  15.       tableAppunt.setModel(tm);
  16.     } catch (SQLException ex) {
  17.       JOptionPane.showMessageDialog(null, ex.getMessage());
  18.     }
  19.   }



initComponents() è automaticamente generato da NetBeans e contiene anche il seguente codice:

Listato 2:
Codice sorgente - presumibilmente C#

  1. tableAppunt.setModel(new javax.swing.table.DefaultTableModel(
  2.       new Object [][] {
  3.         {null, null, null, null},
  4.         {null, null, null, null},
  5.         {null, null, null, null},
  6.         {null, null, null, null}
  7.       },
  8.       new String [] {
  9.         "Title 1", "Title 2", "Title 3", "Title 4"
  10.       }
  11.     ));



Dal listato 1 vedete che ho usato la libreria DBUtils per importare i dati dal database alla jTable passando per il tableModel tm.
Il problema è che non capisco alcune cose:

1) è corretto il fatto che in InitComponents venga automaticamente usato il DefaultTableModel e io poi gliene imponga un altro (tm). C'è un altro modo di agire?
2) Se io, attraverso NetBeans, nelle proprietà della jTable spunto la proprietà autoCreateRowSorter, noto che è possibile ordinare la tabella cliccando sull'header della colonna. Come mai questo avviene anche se, dopo InitComponents, imposto un altro tableModel (tm) e non DefaultTableModel?
3) Il campo DataOra è di tipo timeStamp, perciò i valori vengono visualizzati in questo modo: yyyy-MM-dd HH:mm:ss.
Se io volessi cambiare il formato del valore visualizzato in dd-MM-yyyy HH:mm:ss come devo fare? Considerato che ogni volta chiamo il metodo DbUtils.resultSetToTableModel(rs)...

Insomma, se non usassi il componente visuale di NetBeans jTable credo che riuscirei a gestire meglio il tutto. Mi manda un po' in crisi il fatto che da un lato ci sia il componente visuale con le sue proprietà etc e dall'altro il codice che inserisco io con il mio tableModel tm.

Spero di essere stato chiaro riguardo ai miei dubbi, purtroppo sono un po' confuso e non capisco bene qual è il giusto modo di procedere. :-|

Grazie mille, intanto!

Ultima modifica effettuata da bruno.demarini il 11/09/2014 alle 18:40
PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 17:00
Venerdì, 03/10/2014
Se vai nella proprietà model dell'oggetto tableAppunt tramite l'interfaccia di NetBeans e ci clicchi sopra, si apre una finestra dove puoi eliminare quei valori di default, o addirittura selezionando nella combo in alto a destra (della finestra corrente) se scegli "Custom code" e inserisci null non aggiungerà nessun DefaultTableModel. (vedi allegato)

Ti propongo di non utilizzare:
tm = DbUtils.resultSetToTableModel(rs);

ma di fartelo "a mano", pasta creare una matrice e ciclare il resultset e rimpirla.
In questo modo puoi usare la fantastica classe SimpleDateFormat per gestire il formato delle date, cosi:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

Date dataEora = sdf.format(rs.getDate(1)); // ho usato l'indice perchè gli alias in questo caso non mi convincono



PS: potresti estendere la classe DefaultTableModel e prevedere nel costruttore il passaggio di un parametro di tipo resultset nel costruttore e fare questi ragionamenti dentro li.. ma per una tabella semplice come questa non vale la pena ..


Bonny ha allegato un file: screen.png (49902 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Bonny il 03/10/2014 alle 17:03
PM Quote
Avatar
bruno.demarini (Normal User)
Pro


Messaggi: 84
Iscritto: 22/03/2010

Segnala al moderatore
Postato alle 14:42
Domenica, 05/10/2014
Testo quotato

Postato originariamente da Bonny:

Se vai nella proprietà model dell'oggetto tableAppunt tramite l'interfaccia di NetBeans e ci clicchi sopra, si apre una finestra dove puoi eliminare quei valori di default, o addirittura selezionando nella combo in alto a destra (della finestra corrente) se scegli "Custom code" e inserisci null non aggiungerà nessun DefaultTableModel. (vedi allegato)

Ti propongo di non utilizzare:
tm = DbUtils.resultSetToTableModel(rs);

ma di fartelo "a mano", pasta creare una matrice e ciclare il resultset e rimpirla.
In questo modo puoi usare la fantastica classe SimpleDateFormat per gestire il formato delle date, cosi:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

Date dataEora = sdf.format(rs.getDate(1)); // ho usato l'indice perchè gli alias in questo caso non mi convincono



PS: potresti estendere la classe DefaultTableModel e prevedere nel costruttore il passaggio di un parametro di tipo resultset nel costruttore e fare questi ragionamenti dentro li.. ma per una tabella semplice come questa non vale la pena ..



Grazie mille Bonny la tua risposta mi è stata utilissima! :k:

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 14:41
Lunedì, 06/10/2014
Di niente :k:

PM Quote