Här är en steg för steg förklaring hur man installerar MySQL och JDBC och hur man använder det:
-
Ladda ner och installera MySQL-servern . Gör det som vanligt. Kom ihåg portnumret när du har ändrat det. Det är som standard
3306
. -
Ladda ner JDBC-drivrutinen och lägg i classpath , extrahera ZIP-filen och lägg den innehållande JAR-filen i klasssökvägen. Den leverantörsspecifika JDBC-drivrutinen är en konkret implementering av JDBC API (handledning här ).
Om du använder en IDE som Eclipse eller Netbeans kan du lägga till den i klasssökvägen genom att lägga till JAR-filen som Bibliotek till byggvägen i projektets fastigheter.
Om du gör det "vanlig vanilj" i kommandokonsolen, måste du ange sökvägen till JAR-filen i
-cp
eller-classpath
argument när du kör din Java-applikation.java -cp .;/path/to/mysql-connector.jar com.example.YourClass
.
är bara där för att lägga till den aktuella katalogen till klasssökvägen också så att den kan hittacom.example.YourClass
och;
är klassvägseparatorn som den är i Windows. I Unix och kloner:
bör användas. -
Skapa en databas i MySQL . Låt oss skapa en databas
javabase
. Du vill naturligtvis ha världsherravälde, så låt oss använda UTF-8 också.CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Skapa en användare för Java och bevilja åtkomst till det . Helt enkelt för att du använder
root
är en dålig praxis.CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Ja,
java
är användarnamnet ochpassword
är lösenordet här. -
Bestämma JDBC URL . För att ansluta MySQL-databasen med Java behöver du en JDBC URL i följande syntax:
jdbc:mysql://hostname:port/databasename
-
hostname
:Värdnamnet där MySQL-servern är installerad. Om det är installerat på samma maskin som du kör Java-koden kan du bara användalocalhost
. Det kan också vara en IP-adress som127.0.0.1
. Om du stöter på anslutningsproblem och använder127.0.0.1
istället förlocalhost
löst det, då har du ett problem i din nätverks-/DNS-/värdkonfiguration. -
port
:TCP/IP-porten där MySQL-servern lyssnar på. Detta är som standard3306
. -
databasename
:Namnet på databasen du vill ansluta till. Det ärjavabase
.
Så den slutliga webbadressen bör se ut så här:
jdbc:mysql://localhost:3306/javabase
-
-
Testa anslutningen till MySQL med Java . Skapa en enkel Java-klass med en
main()
metod för att testa anslutningen.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); }
Om du får en
SQLException: No suitable driver
, då betyder det att antingen JDBC-drivrutinen inte laddades automatiskt alls eller att JDBC-URL:n är fel (dvs. den kändes inte igen av någon av de inlästa drivrutinerna). Normalt bör en JDBC 4.0-drivrutin laddas automatiskt när du bara släpper den i runtime classpath. För att utesluta en och annan kan du alltid ladda den manuellt enligt nedan: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); }
Observera att
newInstance()
samtalet är inte behövs här. Det är bara att fixa den gamla och buggigaorg.gjt.mm.mysql.Driver
. Förklaring här . Om den här raden kastarClassNotFoundException
, så har JAR-filen som innehåller JDBC-drivrutinsklassen helt enkelt inte placerats i klasssökvägen.Observera att du inte behöver ladda drivrutinen varje gång före ansluter. Bara en gång under programmets start räcker.
Om du får en
SQLException: Connection refused
ellerConnection timed out
eller en MySQL-specifikCommunicationsException: Communications link failure
, då betyder det att DB inte är tillgänglig alls. Detta kan ha en eller flera av följande orsaker:- IP-adress eller värdnamn i JDBC URL är fel.
- Värdnamn i JDBC URL känns inte igen av den lokala DNS-servern.
- Portnummer saknas eller är fel i JDBC URL.
- DB-servern är nere.
- DB-servern accepterar inte TCP/IP-anslutningar.
- DB-servern har slut på anslutningar.
- Något mellan Java och DB blockerar anslutningar, t.ex. en brandvägg eller proxy.
För att lösa det ena eller det andra, följ följande råd:
- Verifiera och testa dem med
ping
. - Uppdatera DNS eller använd IP-adressen i JDBC URL istället.
- Verifiera det baserat på
my.cnf
av MySQL DB. - Starta DB.
- Verifiera om mysqld har startat utan alternativet
--skip-networking option
. - Starta om DB och fixa din kod så att den stänger anslutningarna
finally
. - Inaktivera brandvägg och/eller konfigurera brandvägg/proxy för att tillåta/vidarebefordra porten.
Observera att när du stänger
Connection
är extremt Viktig. Om du inte stänger anslutningar och fortsätter att få många av dem på kort tid, kan databasen få slut på anslutningar och din applikation kan gå sönder. Skaffa alltidConnection
i entry-with-resources
uttalande . Eller om du inte använder Java 7 än, stäng det uttryckligen ifinally
av entry-finally
blockera. Stängsfinally
är bara för att se till att den stängs också i händelse av ett undantag. Detta gäller ävenStatement
,PreparedStatement
ochResultSet
.
Det var det när det gäller anslutningen. Du hittar här en mer avancerad handledning hur man laddar och lagrar fullvärdiga Java-modellobjekt i en databas med hjälp av en grundläggande DAO-klass.
Att använda ett Singleton-mönster för DB-anslutningen är ett dåligt tillvägagångssätt. Se bland andra frågor:http://stackoverflow.com/q/9428573/ . Det här är ett första misstag för första gången.