PDA

View Full Version : [Java] Database e Thread


sfida89
07-11-2009, 16:05
Salve a tutti ragazzi, sto impazzendo per un problema, forse stupido.
Ho fatto un'applicazione java che si connette ad un database, recupera i dati e li mostra.
Durante il collegamento, il programma sembra bloccato.
Per risolvere, ho pensato di creare un thread e di utilizzare una progress bar in modo indeterminato, questo il codice:

public void visualizzaClienti(final Vector cli) {
//VISULIZZA CLIENtI
operazione = "cliente";


Runnable visualizza=new Runnable() {

public void run() {
progressBar.setIndeterminate(true);
setTabellaClienti();
DefaultTableModel tb = (DefaultTableModel) libriTable.getModel();
//Vector v;
//String q;

String q;
Vector v;

Database.eseguiAggiornamento("LOCK TABLES `Ordini` WRITE, `SpecOrdini` WRITE,`Clienti` WRITE");
if (cli.size() == 0) {

q = "SELECT * FROM `Clienti` WHERE `cod_cliente` LIKE '%" + getNegozio() + "%'";
v = Database.eseguiSelectQuery(q);
} else {
v = cli;
}

if (v.size() == 0) {
JOptionPane.showMessageDialog(mainPanel, "Nessun Cliente presente!", "Attenzione", JOptionPane.WARNING_MESSAGE);
} else {
for (int i = 0; i < v.size(); i++) {
String[] r = (String[]) v.elementAt(i);
tb.insertRow(i, r);
//controllo quante opere in ordine ha questo cliente
//1-se c'è, reucupero dalla tabella ordini l'id_ordine associato al cliente
q = "SELECT * FROM `Ordini` WHERE `ID_Cliente` LIKE '" + r[1] + "'";
Vector f = Database.eseguiSelectQuery(q);
System.out.println("Utente " + r[1] + " con " + f.size() + " ordini");
if (f.size() == 0) {
tb.setValueAt("0", i, 6);
} else {
//per ogni ordine, recupero da SPECORDINE quelli con stato=0,1,2
int totOrdine = 0;
for (int y = 0; y < f.size(); y++) {
String[] o = (String[]) f.elementAt(y);
q = "SELECT * FROM `SpecOrdini` WHERE `ID_Ordine` LIKE '" + o[1] + "' AND (`Stato` LIKE '" + StatoLibro.IN_ORDINE + "' OR `Stato` LIKE '" + StatoLibro.A_MAGAZZINO + "' OR `Stato` LIKE '" + StatoLibro.DISPONIBILE + "')";
Vector w = Database.eseguiSelectQuery(q);
totOrdine += w.size();
System.out.println(" Ordine " + o[1] + " con " + w.size() + " libri");
}
tb.setValueAt(totOrdine, i, 6);
}

}

//Elimino la colonna ID, che non mi serve
TableColumn tc = libriTable.getColumnModel().getColumn(0);
libriTable.removeColumn(tc);
Btn_modClienti.setEnabled(false);
statusMessageLabel.setText("Trovati " + v.size() + " clienti");
Database.eseguiAggiornamento("UNLOCK TABLES");
progressBar.setIndeterminate(false);
}
}
};
try {
SwingUtilities.invokeLater(visualizza);
} catch (Exception ex) {
System.out.println(ex);
}


}

Il problema è che non ottengo il risultato desiderato, ovvero la progress bar non parte e il programma sembra bloccato.
Potete aiutarmi???