sql >> Database >  >> RDS >> Mysql

Verbind Java met een MySQL-database

Hier is een stapsgewijze uitleg hoe u MySQL en JDBC installeert en gebruikt:

  1. Downloaden en installeer de MySQL-server . Doe het gewoon op de gebruikelijke manier. Onthoud het poortnummer wanneer u het hebt gewijzigd. Het is standaard 3306 .

  2. Downloaden het JDBC-stuurprogramma en zet het in classpath , pak het ZIP-bestand uit en plaats het bijbehorende JAR-bestand in het klassenpad. De leverancierspecifieke JDBC-driver is een concrete implementatie van de JDBC-API (tutorial hier ).

    Als u een IDE zoals Eclipse of Netbeans gebruikt, kunt u deze toevoegen aan het klassenpad door het JAR-bestand toe te voegen als Bibliotheek naar het Bouwpad in de eigenschappen van het project.

    Als je het "plain vanilla" doet in de opdrachtconsole, moet je het pad naar het JAR-bestand specificeren in de -cp of -classpath argument bij het uitvoeren van uw Java-toepassing.

    java -cp .;/path/to/mysql-connector.jar com.example.YourClass

    De . is er alleen om de huidige . toe te voegen directory naar het klassenpad zodat het com.example.YourClass . kan vinden en de ; is het classpath-scheidingsteken zoals het is in Windows. In Unix en klonen : moet worden gebruikt.

  3. Maak een database in MySQL . Laten we een database maken javabase . Je wilt natuurlijk Wereldheerschappij, dus laten we ook UTF-8 gebruiken.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Maak een gebruiker voor Java en subsidie het heeft toegang . Simpelweg omdat het gebruik van root is een slechte gewoonte.

    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    

    Ja, java is de gebruikersnaam en het password is het wachtwoord hier.

  5. Bepalen de JDBC-URL . Om verbinding te maken met de MySQL-database met behulp van Java, hebt u een JDBC-URL nodig in de volgende syntaxis:

    jdbc:mysql://hostname:port/databasename
    • hostname :De hostnaam waarop de MySQL-server is geïnstalleerd. Als het is geïnstalleerd op dezelfde machine waarop u de Java-code uitvoert, kunt u gewoon localhost gebruiken . Het kan ook een IP-adres zijn zoals 127.0.0.1 . Als u verbindingsproblemen ondervindt en 127.0.0.1 . gebruikt in plaats van localhost opgelost, dan heb je een probleem in je netwerk/DNS/hosts config.

    • port :De TCP/IP-poort waarop de MySQL-server luistert. Dit is standaard 3306 .

    • databasename :de naam van de database waarmee u verbinding wilt maken. Dat is javabase .

    Dus de uiteindelijke URL zou er als volgt uit moeten zien:

    jdbc:mysql://localhost:3306/javabase
  6. Test de verbinding naar MySQL met Java . Maak een eenvoudige Java-klasse met een main() methode om de verbinding te testen.

    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);
    }
    

    Als u een SQLException: No suitable driver . krijgt , dan betekent dit dat ofwel het JDBC-stuurprogramma helemaal niet automatisch is geladen of dat de JDBC-URL verkeerd is (d.w.z. het werd niet herkend door een van de geladen stuurprogramma's). Normaal gesproken moet een JDBC 4.0-stuurprogramma automatisch worden geladen wanneer u het gewoon in het runtime-klassenpad plaatst. Om de een en de ander uit te sluiten, kunt u deze altijd handmatig laden zoals hieronder:

    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);
    }
    

    Merk op dat de newInstance() oproep is niet hier nodig. Het is alleen om de oude en buggy org.gjt.mm.mysql.Driver te repareren . Uitleg hier . Als deze regel ClassNotFoundException . genereert , dan is het JAR-bestand met de JDBC-stuurprogrammaklasse gewoon niet in het klassenpad geplaatst.

    Merk op dat u het stuurprogramma niet elke keer hoeft te laden voor Verbinden. Slechts één keer tijdens het opstarten van de applicatie is voldoende.

    Als u een SQLException: Connection refused . krijgt of Connection timed out of een MySQL-specifieke CommunicationsException: Communications link failure , dan betekent dit dat de DB helemaal niet bereikbaar is. Dit kan een of meer van de volgende oorzaken hebben:

    1. IP-adres of hostnaam in JDBC-URL is verkeerd.
    2. Hostnaam in JDBC-URL wordt niet herkend door lokale DNS-server.
    3. Poortnummer ontbreekt of is verkeerd in JDBC-URL.
    4. DB-server is uitgevallen.
    5. DB-server accepteert geen TCP/IP-verbindingen.
    6. DB-server heeft geen verbindingen meer.
    7. Iets tussen Java en DB blokkeert verbindingen, b.v. een firewall of proxy.

    Volg de volgende adviezen om het een of het ander op te lossen:

    1. Verifieer en test ze met ping .
    2. Vernieuw DNS of gebruik in plaats daarvan het IP-adres in de JDBC-URL.
    3. Verifieer het op basis van my.cnf van MySQL DB.
    4. Start de database.
    5. Controleer of mysqld is gestart zonder de optie --skip-networking option .
    6. Start de DB opnieuw en corrigeer uw code dienovereenkomstig zodat de verbindingen in finally . worden gesloten .
    7. Schakel firewall uit en/of configureer firewall/proxy om de poort toe te staan/door te sturen.

    Merk op dat het sluiten van de Connection is extreem belangrijk. Als u geen verbindingen verbreekt en er in korte tijd veel van krijgt, kan de database zonder verbindingen komen te zitten en kan uw toepassing kapot gaan. Verkrijg altijd de Connection in een try-with-resources verklaring . Of als je Java 7 nog niet gebruikt, sluit het dan expliciet in finally van een try-finally blok. Afsluiten finally is gewoon om ervoor te zorgen dat het ook wordt gesloten in geval van een uitzondering. Dit geldt ook voor Statement , PreparedStatement en ResultSet .

Dat was het voor zover de connectiviteit betreft. Je kunt hier vinden een meer geavanceerde tutorial over het laden en opslaan van volwaardige Java-modelobjecten in een database met behulp van een standaard DAO-klasse.

Het gebruik van een Singleton-patroon voor de DB-verbinding is een slechte benadering. Zie onder andere:http://stackoverflow.com/q/9428573/ . Dit is een #1 beginnersfout.



  1. MySQL Query om gegevens van vorige week te selecteren?

  2. Een string omkeren in SQL en PL/SQL Een voorbeeld

  3. Retourneer de korte dagnaam van een datum in Oracle

  4. Hoe van database wisselen in Postgres?