Ecco una spiegazione passo passo su come installare MySQL e JDBC e come utilizzarli:
-
Download e installa il server MySQL . Basta farlo nel solito modo. Ricorda il numero di porta ogni volta che lo hai cambiato. Di default è
3306
. -
Download il driver JDBC e inserisci il percorso di classe , estrai il file ZIP e inserisci il file JAR che lo contiene nel classpath. Il driver JDBC specifico del fornitore è un'implementazione concreta di API JDBC (tutorial qui ).
Se stai usando un IDE come Eclipse o Netbeans, puoi aggiungerlo al classpath aggiungendo il file JAR come Libreria al Percorso di costruzione nelle proprietà del progetto.
Se lo stai facendo "plain vanilla" nella console dei comandi, devi specificare il percorso del file JAR nel
-cp
o-classpath
argomento durante l'esecuzione dell'applicazione Java.java -cp .;/path/to/mysql-connector.jar com.example.YourClass
Il
.
è lì solo per aggiungere la corrente directory anche nel percorso di classe in modo che possa individuarecom.example.YourClass
e il;
è il separatore del percorso di classe come in Windows. In Unix e clona:
dovrebbe essere usato. -
Crea un database in MySQL . Creiamo un database
javabase
. Ovviamente vuoi il dominio del mondo, quindi usiamo anche UTF-8.CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Crea un utente per Java e concessione accede . Semplicemente perché usando
root
è una cattiva pratica.CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Sì,
java
è il nome utente e lapassword
è la password qui. -
Determina l'URL JDBC . Per connettere il database MySQL utilizzando Java è necessario un URL JDBC nella seguente sintassi:
jdbc:mysql://hostname:port/databasename
-
hostname
:il nome host in cui è installato il server MySQL. Se è installato sulla stessa macchina su cui esegui il codice Java, puoi semplicemente usarelocalhost
. Può anche essere un indirizzo IP come127.0.0.1
. Se riscontri problemi di connettività e utilizzi127.0.0.1
invece dilocalhost
risolto, allora hai un problema nella tua configurazione di rete/DNS/host. -
port
:la porta TCP/IP su cui è in ascolto il server MySQL. Questo è per impostazione predefinita3306
. -
databasename
:il nome del database a cui desideri connetterti. Questo èjavabase
.
Quindi l'URL finale dovrebbe essere simile a:
jdbc:mysql://localhost:3306/javabase
-
-
Verifica la connessione a MySQL usando Java . Crea una semplice classe Java con un
main()
metodo per testare la connessione.String url = "jdbc:mysql://localhost:3306/javabase"; String username = "java"; String password = "password"; System.out.println("Connecting database..."); try (Connection connection = DriverManager.getConnection(url, username, password)) { System.out.println("Database connected!"); } catch (SQLException e) { throw new IllegalStateException("Cannot connect the database!", e); }
Se ottieni un
SQLException: No suitable driver
, significa che il driver JDBC non è stato caricato automaticamente o che l'URL JDBC è errato (ovvero non è stato riconosciuto da nessuno dei driver caricati). Normalmente, un driver JDBC 4.0 dovrebbe essere caricato automaticamente quando lo si rilascia nel percorso di classe di runtime. Per escludere l'uno e l'altro, puoi sempre caricarlo manualmente come di seguito:System.out.println("Loading driver..."); try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Cannot find the driver in the classpath!", e); }
Nota che il
newInstance()
la chiamata non necessario qui. È solo per riparare il vecchio e buggatoorg.gjt.mm.mysql.Driver
. Spiegazione qui . Se questa riga generaClassNotFoundException
, il file JAR contenente la classe del driver JDBC semplicemente non è stato inserito nel percorso di classe.Tieni presente che non è necessario caricare il driver ogni volta prima collegamento. È sufficiente una sola volta durante l'avvio dell'applicazione.
Se ricevi un
SQLException: Connection refused
oConnection timed out
o unCommunicationsException: Communications link failure
specifico per MySQL , allora significa che il DB non è affatto raggiungibile. Ciò può avere una o più delle seguenti cause:- L'indirizzo IP o il nome host nell'URL JDBC è errato.
- Il nome host nell'URL JDBC non è riconosciuto dal server DNS locale.
- Numero di porta mancante o errato nell'URL JDBC.
- Il server DB è inattivo.
- Il server DB non accetta connessioni TCP/IP.
- Il server DB ha esaurito le connessioni.
- Qualcosa tra Java e DB sta bloccando le connessioni, ad es. un firewall o un proxy.
Per risolvere l'uno o l'altro, segui i seguenti consigli:
- Verificali e testali con
ping
. - Aggiorna il DNS o utilizza invece l'indirizzo IP nell'URL JDBC.
- Verificalo in base a
my.cnf
di MySQL DB. - Avvia il DB.
- Verifica se mysqld è stato avviato senza l'opzione
--skip-networking option
. - Riavvia il DB e correggi il codice in modo che chiuda le connessioni in
finally
. - Disabilita il firewall e/o configura firewall/proxy per consentire/inoltrare la porta.
Nota che chiudendo la
Connection
è estremamente importante. Se non chiudi le connessioni e continui a riceverne molte in breve tempo, il database potrebbe esaurire le connessioni e l'applicazione potrebbe interrompersi. Acquisisci sempre laConnection
in untry-with-resources
dichiarazione . Oppure, se non sei ancora su Java 7, chiudilo esplicitamente infinally
di untry-finally
bloccare. Chiusura trafinally
è solo per assicurarsi che venga chiuso anche in caso di eccezione. Questo vale anche perStatement
,PreparedStatement
eResultSet
.
Questo è stato per quanto riguarda i problemi di connettività. Puoi trovare qui un tutorial più avanzato su come caricare e archiviare oggetti modello Java degni di nota in un database con l'aiuto di una classe DAO di base.
L'uso di un modello Singleton per la connessione DB è un approccio errato. Vedi tra le altre domande:http://stackoverflow.com/q/9428573/ . Questo è un errore da principianti numero 1.