Her er en trin for trin forklaring, hvordan du installerer MySQL og JDBC, og hvordan du bruger det:
-
Download og installer MySQL-serveren . Bare gør det på den sædvanlige måde. Husk portnummeret, når du har ændret det. Det er som standard
3306
. -
Download JDBC-driveren og sæt i classpath , udpak ZIP-filen og læg den indeholdende JAR-fil i klassestien. Den leverandørspecifikke JDBC-driver er en konkret implementering af JDBC API (vejledning her ).
Hvis du bruger en IDE som Eclipse eller Netbeans, kan du tilføje den til klassestien ved at tilføje JAR-filen som Bibliotek til Bygstien i projektets ejendomme.
Hvis du gør det "plain vanilla" i kommandokonsollen, så skal du angive stien til JAR-filen i
-cp
eller-klassesti
argument, når du udfører din Java-applikation.java -cp .;/path/to/mysql-connector.jar com.example.YourClass
. er der bare for at tilføje den aktuelle bibliotek til klassestien, så den kan finde com.example.YourClass
og;
er klassestiseparatoren, som den er i Windows. I Unix og kloner:
skal bruges. -
Opret en database i MySQL . Lad os oprette en database
javabase
. Du vil selvfølgelig have verdensherredømme, så lad os også bruge UTF-8.CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Opret en bruger til Java og tilskud det adgang . Simpelthen fordi du bruger
root
er en dårlig praksis.CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Ja,
java
er brugernavnet ogadgangskoden
er adgangskoden her. -
Bestem JDBC URL . For at forbinde MySQL-databasen ved hjælp af Java skal du bruge en JDBC URL i følgende syntaks:
jdbc:mysql://hostname:port/databasename
-
værtsnavn
:Værtsnavnet, hvor MySQL-serveren er installeret. Hvis det er installeret på den samme maskine, hvor du kører Java-koden, så kan du bare brugelocalhost
. Det kan også være en IP-adresse som127.0.0.1
. Hvis du støder på forbindelsesproblemer og bruger127.0.0.1
i stedet forlocalhost
løst det, så har du et problem i din netværks-/DNS-/værtskonfiguration. -
port
:TCP/IP-porten, hvor MySQL-serveren lytter til. Dette er som standard3306
. -
databasenavn
:Navnet på den database, du vil oprette forbindelse til. Det erjavabase
.
Så den endelige URL skal se sådan ud:
jdbc:mysql://localhost:3306/javabase
-
-
Test forbindelsen til MySQL ved hjælp af Java . Opret en simpel Java-klasse med en
main()
metode til at teste forbindelsen.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); }
Hvis du får en
SQLException:Ingen passende driver
, så betyder det, at enten JDBC-driveren slet ikke blev automatisk indlæst, eller at JDBC-URL'en er forkert (dvs. den blev ikke genkendt af nogen af de indlæste drivere). Normalt skal en JDBC 4.0-driver automatisk indlæses, når du bare slipper den i runtime classpath. For at udelukke én og anden, kan du altid indlæse den manuelt som nedenfor: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); }
Bemærk, at
newInstance()
opkaldet er ikke brug for her. Det er bare at rette den gamle og fejlbehæftedeorg.gjt.mm.mysql.Driver
. Forklaring her . Hvis denne linje kasterClassNotFoundException
, så er JAR-filen, der indeholder JDBC-driverklassen, simpelthen ikke placeret i klassestien.Bemærk, at du ikke behøver at indlæse driveren hver gang før Tilslutning. Kun én gang under applikationsstart er nok.
Hvis du får en
SQLException:Forbindelse nægtet
ellerForbindelsen fik timeout
eller en MySQL-specifikCommunicationsException:Communications link failure
, så betyder det, at DB'en slet ikke er tilgængelig. Dette kan have en eller flere af følgende årsager:- IP-adresse eller værtsnavn i JDBC URL er forkert.
- Værtsnavn i JDBC URL genkendes ikke af den lokale DNS-server.
- Portnummer mangler eller er forkert i JDBC URL.
- DB-serveren er nede.
- DB-serveren accepterer ikke TCP/IP-forbindelser.
- DB-serveren er løbet tør for forbindelser.
- Noget mellem Java og DB blokerer forbindelser, f.eks. en firewall eller proxy.
For at løse det ene eller det andet, følg følgende råd:
- Bekræft og test dem med
ping
. - Opdater DNS, eller brug IP-adressen i JDBC URL i stedet.
- Bekræft det baseret på
my.cnf
af MySQL DB. - Start DB.
- Bekræft, om mysqld er startet uden
--skip-netværksindstillingen
. - Genstart DB, og ret din kode i overensstemmelse hermed, så den lukker forbindelser i
endelig
. - Deaktiver firewall og/eller konfigurer firewall/proxy for at tillade/viderestille porten.
Bemærk, at lukke
Forbindelsen
er ekstremt vigtig. Hvis du ikke lukker forbindelser og bliver ved med at få mange af dem på kort tid, kan databasen løbe tør for forbindelser, og din applikation kan gå i stykker. Anskaf altidForbindelsen
i enprøv-med-ressourcer
erklæring . Eller hvis du ikke er på Java 7 endnu, skal du udtrykkeligt lukke det iendelig
af enforsøg endelig
blok. Lukkerendelig
ind er bare for at sikre, at den også bliver lukket i tilfælde af en undtagelse. Dette gælder også forErklæring
,PreparedStatement
ogResultatsæt
.
Det var det, hvad forbindelsen angår. Du kan finde her en mere avanceret vejledning i, hvordan man indlæser og gemmer fuldværdige Java-modelobjekter i en database ved hjælp af en grundlæggende DAO-klasse.
At bruge et Singleton-mønster til DB-forbindelsen er en dårlig tilgang. Se blandt andre spørgsmål:http://stackoverflow.com/q/9428573/ . Dette er en #1 starter fejl.