Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-10-2009, 17:29   #1
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
[java - jdbc] Usare una JTable per mettere i risultati di una query

Salve a tutti! Praticamente come da titolo... ho provato in mille modi con la JTable e la AbstractTableModel ma niente di fatto.
Io uso uno classe che estende la classe JFrame, nella quale è presente una tabella che dovrebbe visualizzare i risultati di una query appena questa viene lanciata. I risultati di questa query sono le anagrafiche di persone. Spero in un vostro aiuto.... Grazie!
salim è offline   Rispondi citando il messaggio o parte di esso
Old 10-10-2009, 17:50   #2
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
in altre parole vorrei sapere come riempire la matrice delle righe, visto che il costruttore della JTable prende come parametri un doppio array di righe e un array di colonne. Attendo una vostra risposta
salim è offline   Rispondi citando il messaggio o parte di esso
Old 10-10-2009, 18:08   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quando vedi un array, scappa. Quando è doppio, raddoppia la velocità di fuga.

JTable ha un costruttore più utile, quello che prende un TableModel.

Dei TableModel quello che interessa il non masochista è DefaultTableModel.

Fai la query, poi:

1. crei un DefaultTableModel

DefaultTableModel model = new DefaultTableModel();

2. in base alle colonne del result set imposti le colonne del model

model.setColumnCount(XYZ);

3. inizi a scorrere il result set. Per ogni riga del risultato aggiungi una riga vuota al modello:

model.setRowCount(model.getRowCount() + 1);

e popoli quella riga con il metodo setValueAt

Codice:
int rigaCorrente = model.getRowCount() - 1;
for(int c = 0; c < model.getColumnCount(); c++) {
    Object valore = resultSet.getObject(c);
    model.setValueAt(valore, rigaCorrente, c);
}
Alla fine passi il modello alla tabella:

tabella.setModel(model);

o crei la nuova tabella con quel modello:

tabella = new JTable(model);

Dipende se la tabella c'è già o no.

E' un procedimento che puoi eseguire in parallelo rispetto al thread che gestisce l'interfaccia utente, ad esempio con uno SwingWorker.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 16:38   #4
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
ok! Il tuo metodo funziona.. solo che mi fa apparire come colonne le lettere dell'alfabeto anzicchè quello che voglio io (cognome, nome, ecc.) e poi io volevo visualizzare i risultati di una query SELECT anzicchè le righe vuote come hai specificato.
Sai come posso ovviare a questi due problemi? Grazie e scusa per il disturbo
salim è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 16:47   #5
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
il primo problema è risolto... quello delle colonne, usando il metodo setColumnIdentifiers(arraydicolonne), mi manca come popolare la tabella con i risultati di una query.. Spero di ricevere tue notizie al più presto!
salim è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 16:50   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il valore nelle righe lo metti con setValueAt(valore, riga, colonna) quando cicli sul result set.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 17:11   #7
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
Ho capito... ma ancora non mi funziona.. ti posto il codice:

Codice:
		db = new DB(); //classe con la quale mi connetto al mio database.
		String tutti = getQueryTutti(); //restituisce la mia query
		
		
		
		try{
			defaultmodel = new DefaultTableModel();
			defaultmodel.setColumnCount(colonne.length);
			defaultmodel.setColumnIdentifiers(colonne);
			ResultSet rs = db.selectQuery(tutti);
			
			//Contimao le rige del RS
//			int count = 0;
//			while(!rs.isLast()){
//				count++;
//				rs.next();
//			}
//			rs.first(); //POSSO USARE UNO DEI DUE MODI
			int count= 0;
			while(rs.next()) {	
				count++;
				defaultmodel.setRowCount(defaultmodel.getRowCount() + 1);
			}
			rs.first();
			//int pazienteiesimo[] = new int[100];
			
			int rigaCorrente = defaultmodel.getRowCount()-1;
			for(int c = 0; c < defaultmodel.getColumnCount(); c++) {
				Object valore = rs.getObject(c);
			    defaultmodel.setValueAt(valore, rigaCorrente, c);
			    
			}
			tabellapazienti = new JTable(defaultmodel);
quello che non va è che mi visualizza le righe vuote anzicchè il contenuto della query..
salim è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 17:20   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quel codice riempie sola una riga, l'ultima. Ti basta poi un ciclo, non ne servono tre. Prova poi a stampare "valore" nel ciclo: magari non c'è nessun valore.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 17:27   #9
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
Mi stampa le righe vuote e va in eccezione quindi non entra neanche nel ciclo... Mamma mia... che devo fare?
salim è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 17:30   #10
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
da dire che l'ultima istruzione che è sbagliata è in realtà messa alla fine del catch.... per essere chiaro... per il resto c'è da dire che le JTable sono più complicate di quanto mi aspettavo...
salim è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 17:35   #11
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
ho fatto il debug manuale hehe con il println e mi accorgo che tutto va bene fino al ciclo dove c'è il setValueAt, che non mi stampa il valore. Hai qualche soluzione e scusami per il disturbo... ma è importante...
salim è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 17:37   #12
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Prova così:

Codice:
DefaultTableModel model = new DefaultTableModel();
int cMax = rs.getMetaData().getColumnCount();
model.setColumnCount(cMax);
while(rs.isLast()) {
   int riga = model.getRowCount(); 
   for(int c = 0; c < cMax; c++) {
      model.setRowCount(model.getRowCount() + 1); //nuova riga
      Object valore = rs.get(c);
      model.setValueAt(valore, riga, c);
   }
}
tabella.setModel(model);
L'ho scritto al volo ma dovrebbe essere giusto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 18:00   #13
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
ok Grazie! Ma è peggio di prima, così non mi visualizza neanche le righe vuote... cmq se non hai altre soluzioni... vedrò di sbatterci la testa un altro pò. Dovrei trovare la soluzione non è che è un problema di quelli pazzeschi....
se mi blocco qua.... sono finito.... Grazie ancora! Ciao!
salim è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2009, 18:01   #14
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
I effetti ho messo un "rs.last()" al posto di "rs.next()" (cambia la condizione del while)

Whops.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2009, 15:24   #15
salim
Member
 
Iscritto dal: Jul 2006
Messaggi: 54
Problema risolto.. tra vari tentantivi, il ciclo cmq era quelo... Ora però devo fare in modo di rendere tutte le celle editabili... ma questo è il pensiero minore
salim è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Nothing Headphone (1) Pro ufficiali: tri...
JBL lancia le nuove soundbar Cinema SB p...
Inizia il Prime Day in anticipo Amazon: ...
Quando l'agente IA fa tutto da solo: ven...
Domotica e obsolescenza programmata: la ...
BOOX Picco disponibile al preorder, un e...
Rubano rimorchi con logo NVIDIA pensando...
Il CEO di MongoDB lascia tutto e passa a...
Caro energia, l'UE raccomanda di abbassa...
AMD acquisisce World Labs: 8,2 miliardi ...
Google perde la testa: AI Overview conso...
Anthropic presenta Claude Sonnet 5.5, e ...
ESA e ClearSpace svilupperanno un satell...
Oracle, stock option da quasi un miliard...
Starship: si è conclusa anticipat...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v