Hier is een stapsgewijze uitleg hoe u MySQL en JDBC installeert en gebruikt:
-
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
. -
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 hetcom.example.YourClass
. kan vinden en de;
is het classpath-scheidingsteken zoals het is in Windows. In Unix en klonen:
moet worden gebruikt. -
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;
-
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 hetpassword
is het wachtwoord hier. -
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 gewoonlocalhost
gebruiken . Het kan ook een IP-adres zijn zoals127.0.0.1
. Als u verbindingsproblemen ondervindt en127.0.0.1
. gebruikt in plaats vanlocalhost
opgelost, dan heb je een probleem in je netwerk/DNS/hosts config. -
port
:De TCP/IP-poort waarop de MySQL-server luistert. Dit is standaard3306
. -
databasename
:de naam van de database waarmee u verbinding wilt maken. Dat isjavabase
.
Dus de uiteindelijke URL zou er als volgt uit moeten zien:
jdbc:mysql://localhost:3306/javabase
-
-
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 buggyorg.gjt.mm.mysql.Driver
te repareren . Uitleg hier . Als deze regelClassNotFoundException
. 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 ofConnection timed out
of een MySQL-specifiekeCommunicationsException: Communications link failure
, dan betekent dit dat de DB helemaal niet bereikbaar is. Dit kan een of meer van de volgende oorzaken hebben:- IP-adres of hostnaam in JDBC-URL is verkeerd.
- Hostnaam in JDBC-URL wordt niet herkend door lokale DNS-server.
- Poortnummer ontbreekt of is verkeerd in JDBC-URL.
- DB-server is uitgevallen.
- DB-server accepteert geen TCP/IP-verbindingen.
- DB-server heeft geen verbindingen meer.
- 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:
- Verifieer en test ze met
ping
. - Vernieuw DNS of gebruik in plaats daarvan het IP-adres in de JDBC-URL.
- Verifieer het op basis van
my.cnf
van MySQL DB. - Start de database.
- Controleer of mysqld is gestart zonder de optie
--skip-networking option
. - Start de DB opnieuw en corrigeer uw code dienovereenkomstig zodat de verbindingen in
finally
. worden gesloten . - 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 deConnection
in eentry-with-resources
verklaring . Of als je Java 7 nog niet gebruikt, sluit het dan expliciet infinally
van eentry-finally
blok. Afsluitenfinally
is gewoon om ervoor te zorgen dat het ook wordt gesloten in geval van een uitzondering. Dit geldt ook voorStatement
,PreparedStatement
enResultSet
.
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.