Ho realizzato un programmino di gestione con interfaccia grafica in Java, utilizzo anche io come DB MySql e funge tutto alla perfezione.
Allora innanzitutto ti crei una classe che, come puoi vedere, ho chiamato ConnectionManager, questa classe sarà responsabile ogni volta di stabilire la connessione col DB MySql.
codice:
import java.sql.*;
import programmatunisia.UtilityClasses.MyException;
public class ConnectionManager {
private ConnectionManager() {};
private static Connection conn = null;
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static String URL = "jdbc:mysql://localhost/nome_database";
private static final String LOGIN = "utente_database";
private static final String PASSWORD = "pass_utente_database";
public static Connection getConnection() throws SQLException, MyException {
try {
if (conn == null) {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, LOGIN, PASSWORD);
}else{
if (conn.isClosed()) {
conn = DriverManager.getConnection(URL, LOGIN, PASSWORD);
}else{
conn.rollback();
}
}
return conn;
} catch (ClassNotFoundException e) {
throw new MyException("Errore: " + e.getMessage());
}
}
//Questo metodo l'ho aggiunto per permettere all'utente di scegliere l'indirizzo del Server
//dove risiede il DB qualora questo non fosse localhost ma su postazione remota.
public static void setIndirizzo(String temp) {
URL = "jdbc:mysql://" + temp + "/gestione_camiceria";
}
}
Poi crei un'istanza di questa classe ogni volta che dovrai stabilire una connessione con il DB per fare qualche operazione su di esso, ti posto l'esempio di un metodo di INSERIMENTO.
codice:
import java.sql.*;
import programmatunisia.DataAccessClasses.ConnectionManager;
import programmatunisia.DomainClasses.Persona;
import programmatunisia.UtilityClasses.MyException;
public class PersonaDAO{
private PersonaDAO() {
}
private static final String INSERT = "INSERT INTO persona(nome, cognome, eta) VALUES (?, ?, ?)";
public static void insert(Persona p) throws MyException {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = ConnectionManager.getConnection();
pstmt = conn.prepareStatement(INSERT);
pstmt.setString(1, p.getNome());
pstmt.setString(2, p.getCognome());
pstmt.setInt(3, p.getEta());
pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException ex) {
try {
conn.close();
} catch (SQLException e) {
throw new MyException("Errore: " + ex.getMessage());
}
throw new MyException("Errore: " + ex.getMessage());
}
}
}
Come puoi vedere creo un oggetto Connection conn = null, lo inizializzo come istanza di ConnectionManager, faccio quello che devo fare, chiudo la connessione con conn.close;
Lavorando con NetBeans includo sul progetto la libreria fornita da MySql che mi funzionerà da driver (il file connectorjdbc.jar).
Quindi compilo tutto su NetBeans e genero il dist.
Nota che quando generi il Jar con NetBeans, viene creata una cartella dist con dentro il Jar del tuo progetto e con una cartella lib contenente le librerie che hai usato nel progetto.
Nel caso in cui lanci il progetto da NetBeans con Run, funzionerà tutto, se vai sul prompt e vai nel percorso del Jar eseguibile e lo lancerai con java -jar NOMEPROGETTO.jar funzionerà allo stesso modo (perchè trova sempre la cartella lib li dove è posizionato il jar).
Qualora tu copi e incolli il jar in un'altra posizione, noterai che sia cliccandoci sopra, sia dal prompt, avrai problemi perchè il tuo jar non riesce a reperire più la cartella lib con dentro le librerie (nel tuo caso il connector jdbc).
Quindi ti raccomando di copiare nella stessa cartella dovrei avrai copiato in precedenza il jar la cartella lib con il connector dentro e vedrai che tornerà a funzionare.
QUINDI IN DEFINITIVA FAI BENE ATTENZIONE CHE IL TUO FILE ESEGUIBILE .jar SI TROVI IN UNA CARTELLA CHE CONTIENE ALL'INTERNO ANCHE LA CARTELLA lib CON DENTRO IL CONNECTOR.