Oto wyjaśnienie krok po kroku, jak zainstalować MySQL i JDBC oraz jak z nich korzystać:
-
Pobierz i zainstaluj serwer MySQL . Po prostu zrób to w zwykły sposób. Zapamiętaj numer portu za każdym razem, gdy go zmienisz. Domyślnie jest to
3306
. -
Pobierz sterownik JDBC i umieścić w ścieżce klas , wyodrębnij plik ZIP i umieść zawierający plik JAR w ścieżce klasy. Sterownik JDBC specyficzny dla dostawcy jest konkretną implementacją interfejs API JDBC (tutorial tutaj ).
Jeśli używasz IDE, takiego jak Eclipse lub Netbeans, możesz dodać je do ścieżki klasy, dodając plik JAR jako Biblioteka do ścieżki budowania we właściwościach projektu.
Jeśli robisz to "plain vanilla" w konsoli poleceń, musisz określić ścieżkę do pliku JAR w
-cp
lub-classpath
argument podczas wykonywania aplikacji Java.java -cp .;/path/to/mysql-connector.jar com.example.YourClass
.
jest tylko po to, aby dodać bieżący katalogu do ścieżki klasy, aby mógł zlokalizowaćcom.example.YourClass
i;
jest separatorem ścieżki klas, tak jak w systemie Windows. W Uniksie i klonach:
powinno być używane. -
Utwórz bazę danych w MySQL . Stwórzmy bazę danych
javabase
. Oczywiście chcesz dominacji nad światem, więc użyjmy również UTF-8.CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Utwórz użytkownika dla Javy i grant ma dostęp . Po prostu dlatego, że za pomocą
root
to zła praktyka.CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Tak,
java
to nazwa użytkownika ipassword
jest tutaj hasło. -
Określ adres URL JDBC . Aby połączyć bazę danych MySQL za pomocą Javy, potrzebujesz adresu URL JDBC w następującej składni:
jdbc:mysql://hostname:port/databasename
-
hostname
:nazwa hosta, na którym zainstalowany jest serwer MySQL. Jeśli jest zainstalowany na tym samym komputerze, na którym uruchamiasz kod Java, możesz po prostu użyćlocalhost
. Może to być również adres IP, taki jak127.0.0.1
. Jeśli napotkasz problemy z łącznością i używasz127.0.0.1
zamiastlocalhost
rozwiązałeś to, masz problem z konfiguracją sieci/DNS/hostów. -
port
:Port TCP/IP, na którym nasłuchuje serwer MySQL. Domyślnie jest to3306
. -
databasename
:nazwa bazy danych, z którą chcesz się połączyć. To jestjavabase
.
Tak więc końcowy adres URL powinien wyglądać tak:
jdbc:mysql://localhost:3306/javabase
-
-
Przetestuj połączenie do MySQL przy użyciu Javy . Utwórz prostą klasę Java za pomocą
main()
metoda testowania połączenia.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); }
Jeśli otrzymasz
SQLException: No suitable driver
, oznacza to, że albo sterownik JDBC nie został w ogóle załadowany automatycznie, albo adres URL JDBC jest nieprawidłowy (tj. nie został rozpoznany przez żaden z załadowanych sterowników). Zwykle sterownik JDBC 4.0 powinien być ładowany automatycznie po upuszczeniu go w ścieżce klas środowiska wykonawczego. Aby wykluczyć jedno i drugie, zawsze możesz je ręcznie załadować, jak poniżej: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); }
Zauważ, że
newInstance()
połączenie nie potrzebne tutaj. Wystarczy naprawić stary i wadliwyorg.gjt.mm.mysql.Driver
. Wyjaśnienie tutaj . Jeśli ta linia zwróciClassNotFoundException
, plik JAR zawierający klasę sterownika JDBC po prostu nie jest umieszczany w ścieżce klasy.Pamiętaj, że nie musisz ładować sterownika za każdym razem przed złączony. Wystarczy tylko raz podczas uruchamiania aplikacji.
Jeśli otrzymasz
SQLException: Connection refused
lubConnection timed out
lub specyficzny dla MySQLCommunicationsException: Communications link failure
, oznacza to, że baza danych jest w ogóle nieosiągalna. Może to mieć jedną lub więcej z następujących przyczyn:- Adres IP lub nazwa hosta w adresie URL JDBC jest nieprawidłowy.
- Nazwa hosta w adresie URL JDBC nie jest rozpoznawana przez lokalny serwer DNS.
- Brak numeru portu lub jest on nieprawidłowy w adresie URL JDBC.
- Serwer DB nie działa.
- Serwer DB nie akceptuje połączeń TCP/IP.
- Na serwerze DB zabrakło połączeń.
- Coś pomiędzy Javą a DB blokuje połączenia, np. zapora lub serwer proxy.
Aby rozwiązać jedno lub drugie, postępuj zgodnie z następującymi wskazówkami:
- Zweryfikuj i przetestuj je za pomocą
ping
. - Odśwież DNS lub użyj adresu IP w adresie URL JDBC.
- Zweryfikuj go na podstawie
my.cnf
bazy danych MySQL. - Uruchom DB.
- Sprawdź, czy mysqld jest uruchomiony bez opcji
--skip-networking option
. - Zrestartuj bazę danych i odpowiednio popraw swój kod, aby zamykał połączenia w
finally
. - Wyłącz zaporę i/lub skonfiguruj zaporę/proxy, aby zezwolić/przekazać port.
Zwróć uwagę, że zamknięcie
Connection
jest bardzo ważny. Jeśli nie zamykasz połączeń i otrzymujesz ich dużo w krótkim czasie, to w bazie danych może zabraknąć połączeń, a Twoja aplikacja może się zepsuć. Zawsze uzyskujConnection
wtry-with-resources
oświadczenie . Lub jeśli nie korzystasz jeszcze z Javy 7, zamknij ją wfinally
try-finally
blok. Zamykanie wfinally
jest tylko zapewnienie, że zostanie zamknięty również w przypadku wyjątku. Dotyczy to równieżStatement
,PreparedStatement
iResultSet
.
To tyle, jeśli chodzi o łączność. Możesz znaleźć tutaj bardziej zaawansowany samouczek, jak ładować i przechowywać w pełni wartościowe obiekty modelu Java w bazie danych za pomocą podstawowej klasy DAO.
Używanie wzorca Singleton dla połączenia DB jest złym podejściem. Zobacz między innymi:http://stackoverflow.com/q/9428573/ . To błąd nr 1 dla początkujących.