Ecco qua il codice della classe:
(per vedere dove si bloccava ho inserito un po' di false stringhe, non fateci caso...)
codice:
package applicazione1;
/*
* Classe dedicata alla gestione del Database.
* Gestisce l'apertura e la chiusura della connessione col Database
* Fornisce i metodi per l'esecuzione delle query sul Database
*/
import java.sql.*;
import java.util.Vector;
import java.security.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class DBConnect {
private String nomeDB; // Nome del Database a cui connettersi
private String nomeUtente; // Nome utente utilizzato per la connessione al Database
private String pwdUtente; // Password usata per la connessione al Database
private String errore; // Raccoglie informazioni riguardo l'ultima eccezione sollevata
private Connection db; // La connessione col Database
private String HostDB; //stringa dove risiede il db
private boolean connesso; // Flag che indica se la connessione è attiva o meno
private String StringaConn = "";
public DBConnect(String nomeDB){
//this(nomeDB, "", "");
this.nomeDB = nomeDB;
}
public DBConnect(String nomeDB, String nomeUtente, String pwdUtente, String HostDB) {
this.nomeDB = nomeDB;
this.nomeUtente = nomeUtente;
this.pwdUtente = pwdUtente;
this.HostDB = HostDB;
connesso = false;
errore = "";
}
// Apre la connessione con il Database
public boolean connetti() {
connesso = false;
try {
StringaConn ="forse";
// Carico il driver JDBC per la connessione con il database MySQL
Class.forName("com.mysql.jdbc.Driver", true, this.getClass().getClassLoader());
StringaConn="Ok1";
// Controllo che il nome del Database non sia nulla
if (!nomeDB.equals("")) {
StringaConn = "OK2";
// Controllo se il nome utente va usato o meno per la connessione
if (nomeUtente.equals("")) {
//StringaConn="jdbc:mysql://192.168.25.76:3306/ping";
// La connessione non richiede nome utente e password
StringaConn = "jdbc:mysql://"+ HostDB +"/" + nomeDB;
db = DriverManager.getConnection(StringaConn);
} else {
// La connessione richiede nome utente, controllo se necessita anche della password
if (pwdUtente.equals("")) {
// La connessione non necessita di password
StringaConn ="jdbc:mysql://"+ HostDB +"/" + nomeDB + "?user=" + nomeUtente;
db = DriverManager.getConnection(StringaConn);
} else {
// La connessione necessita della password
StringaConn = "jdbc:mysql://"+ HostDB +"/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente;
db = DriverManager.getConnection(StringaConn);
}
}
// La connessione è avvenuta con successo
connesso = true;
} else {
System.out.println("Manca il nome del database!!");
System.out.println("Scrivere il nome del database da utilizzare all'interno del file \"config.xml\"");
System.exit(0);
}
} catch (Exception e) { errore = e.getMessage(); }
return connesso;
}
// Esegue una query di selezione dati sul Database
// query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
// colonne: il numero di colonne di cui sarà composta la tupla del risultato
// ritorna un Vector contenente tutte le tuple del risultato
public Vector eseguiQuery(String query) {
Vector v = null;
String [] record;
int colonne = 0;
try {
Statement stmt = db.createStatement(); // Creo lo Statement per l'esecuzione della query
ResultSet rs = stmt.executeQuery(query); // Ottengo il ResultSet dell'esecuzione della query
v = new Vector();
ResultSetMetaData rsmd = rs.getMetaData();
colonne = rsmd.getColumnCount();
while(rs.next()) { // Creo il vettore risultato scorrendo tutto il ResultSet
record = new String[colonne];
for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
v.add( (String[]) record.clone() );
}
rs.close(); // Chiudo il ResultSet
stmt.close(); // Chiudo lo Statement
} catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
return v;
}
// Esegue una query di aggiornamento sul Database
// query: una stringa che rappresenta un'istuzione SQL di tipo UPDATE da eseguire
// ritorna TRUE se l'esecuzione è adata a buon fine, FALSE se c'è stata un'eccezione
public boolean eseguiAggiornamento(String query) {
int numero = 0;
boolean risultato = false;
try {
Statement stmt = db.createStatement();
numero = stmt.executeUpdate(query);
risultato = true;
stmt.close();
} catch (Exception e) {
e.printStackTrace();
errore = e.getMessage();
risultato = false;
}
return risultato;
}
// Chiude la connessione con il Database
public void disconnetti() {
try {
db.close();
connesso = false;
} catch (Exception e) { e.printStackTrace(); }
}
public boolean isConnesso() { return connesso; } // Ritorna TRUE se la connessione con il Database è attiva
public String getErrore() { return errore; } // Ritorna il messaggio d'errore dell'ultima eccezione sollevata
public String GetConn () {
return StringaConn + " " + nomeDB + " " + nomeUtente+ " " + pwdUtente + " " + HostDB + " " + System.getProperty("java.class.path");}
}
e dall'applicazione la chiamo così:
codice:
DBConnect db1 = new DBConnect("db","user","password","192.168.25.76:3306");
if ( !db1.connetti() ) {
TextArea1.append ("Errore durante la connessione.\r\n" + db1.GetConn() + "\r\n");
TextArea1.append( db1.getErrore() );
}else
{
TextArea1.append ("OK");
}
L'output lo sta elaborando... ormai da 15 minuti, aspetto ancora un po' e poi vi aggiorno...
grazie!!