Mysql
 sql >> Database >  >> RDS >> Mysql

Collega Java a un database MySQL

Ecco una spiegazione passo passo su come installare MySQL e JDBC e come utilizzarli:

  1. 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 .

  2. 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 individuare com.example.YourClass e il ; è il separatore del percorso di classe come in Windows. In Unix e clona : dovrebbe essere usato.

  3. 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;
    
  4. 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 la password è la password qui.

  5. 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 usare localhost . Può anche essere un indirizzo IP come 127.0.0.1 . Se riscontri problemi di connettività e utilizzi 127.0.0.1 invece di localhost 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 predefinita 3306 .

    • databasename :il nome del database a cui desideri connetterti. Questo è javabase .

    Quindi l'URL finale dovrebbe essere simile a:

    jdbc:mysql://localhost:3306/javabase
  6. 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 buggato org.gjt.mm.mysql.Driver . Spiegazione qui . Se questa riga genera ClassNotFoundException , 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 o Connection timed out o un CommunicationsException: Communications link failure specifico per MySQL , allora significa che il DB non è affatto raggiungibile. Ciò può avere una o più delle seguenti cause:

    1. L'indirizzo IP o il nome host nell'URL JDBC è errato.
    2. Il nome host nell'URL JDBC non è riconosciuto dal server DNS locale.
    3. Numero di porta mancante o errato nell'URL JDBC.
    4. Il server DB è inattivo.
    5. Il server DB non accetta connessioni TCP/IP.
    6. Il server DB ha esaurito le connessioni.
    7. 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:

    1. Verificali e testali con ping .
    2. Aggiorna il DNS o utilizza invece l'indirizzo IP nell'URL JDBC.
    3. Verificalo in base a my.cnf di MySQL DB.
    4. Avvia il DB.
    5. Verifica se mysqld è stato avviato senza l'opzione --skip-networking option .
    6. Riavvia il DB e correggi il codice in modo che chiuda le connessioni in finally .
    7. 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 la Connection in un try-with-resources dichiarazione . Oppure, se non sei ancora su Java 7, chiudilo esplicitamente in finally di un try-finally bloccare. Chiusura tra finally è solo per assicurarsi che venga chiuso anche in caso di eccezione. Questo vale anche per Statement , PreparedStatement e ResultSet .

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.