Jak połączyć się z bazą danych MySQL w Javie?
Kiedy próbuję, rozumiem
java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
Lub
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Lub
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
Odpowiedzi:
DriverManager
jest dość starym sposobem robienia rzeczy. Lepszym sposobem jest uzyskanie takiegoDataSource
, który jest już skonfigurowany dla Ciebie przez kontener serwera aplikacji:lub tworzenie instancji i konfigurowanie bezpośrednio ze sterownika bazy danych:
a następnie uzyskaj z niego połączenia, tak jak powyżej:
źródło
com.mysql.jdbc.Driver
? czy ta metoda jest lepsza?MysqlDataSource
implementuje,javax.sql.DataSource
który jest nowszym mechanizmem.rs
istmt
? Dlaczego nie tylkoconn
?Oto wyjaśnienie krok po kroku, jak zainstalować MySQL i JDBC i jak go używać:
Pobierz i zainstaluj serwer MySQL . Po prostu zrób to w zwykły sposób. Zapamiętaj numer portu, ilekroć go zmienisz. Domyślnie jest
3306
.Pobierz sterownik JDBC i umieść w ścieżce klasy , wyodrębnij plik ZIP i umieść zawierający plik JAR w ścieżce klasy. Sterownik JDBC specyficzny dla dostawcy jest konkretną implementacją interfejsu API JDBC ( samouczek tutaj ).
Jeśli używasz środowiska IDE, takiego jak Eclipse lub Netbeans, możesz dodać go do ścieżki klas, dodając plik JAR jako bibliotekę do ścieżki kompilacji we właściwościach projektu.
Jeśli robisz to jako „zwykłą wanilię” w konsoli poleceń, musisz określić ścieżkę do pliku JAR w argumencie
-cp
lub-classpath
podczas uruchamiania aplikacji Java..
Jest właśnie tam, aby dodać aktualny katalog do ścieżki klasy, jak również tak, że można go zlokalizowaćcom.example.YourClass
i;
jest separator classpath tak jak w systemie Windows. W Uniksie i klonach:
powinno się używać.Utwórz bazę danych w MySQL . Stwórzmy bazę danych
javabase
. Oczywiście chcesz World Domination, więc użyjmy także UTF-8.Utwórz użytkownika dla Java i udziel mu dostępu . Po prostu dlatego, że używanie
root
jest złą praktyką.Tak, tutaj
java
jest nazwa użytkownika ipassword
hasło.Określ adres URL JDBC . Aby połączyć bazę danych MySQL za pomocą Java, potrzebujesz adresu URL JDBC w następującej składni:
hostname
: Nazwa hosta, na którym jest zainstalowany 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 jak127.0.0.1
. Jeśli napotkasz problemy z połączeniem i używanie127.0.0.1
zamiastlocalhost
rozwiązania, oznacza to, że masz problem z konfiguracją sieci / DNS / hostów.port
: Port TCP / IP, na którym nasłuchuje serwer MySQL. To jest domyślnie3306
.databasename
: Nazwa bazy danych, z którą chcesz się połączyć. Tojavabase
.Tak więc końcowy adres URL powinien wyglądać następująco:
Przetestuj połączenie z MySQL przy użyciu Java . Utwórz prostą klasę Java za pomocą
main()
metody testowania połączenia.Jeśli otrzymasz a
SQLException: No suitable driver
, oznacza to, że albo sterownik JDBC nie został w ogóle automatycznie załadowany, albo że adres URL JDBC jest nieprawidłowy (tzn. Nie został rozpoznany przez żaden z załadowanych sterowników). Zwykle sterownik JDBC 4.0 powinien zostać automatycznie załadowany, gdy tylko upuścisz go w ścieżce klasy środowiska wykonawczego. Aby wykluczyć jedno i drugie, zawsze możesz ręcznie załadować go w następujący sposób:Pamiętaj, że
newInstance()
połączenie nie jest tutaj potrzebne. To tylko naprawić stary i buggyorg.gjt.mm.mysql.Driver
. Wyjaśnienie tutaj . Jeśli ten wiersz zostanie zgłoszonyClassNotFoundException
, plik JAR zawierający klasę sterownika JDBC po prostu nie zostanie umieszczony w ścieżce klasy.Pamiętaj, że nie musisz ładować sterownika za każdym razem przed połączeniem. Wystarczy tylko raz podczas uruchamiania aplikacji.
Jeśli masz
SQLException: Connection refused
lubConnection timed out
lub konkretnego MySQLCommunicationsException: Communications link failure
, to oznacza to, że DB nie jest osiągalny w ogóle. Może to mieć jedną lub więcej z następujących przyczyn:Aby rozwiązać jedno lub drugie, postępuj zgodnie z następującymi wskazówkami:
ping
.my.cnf
MySQL DB.--skip-networking option
.finally
.Pamiętaj, że zamknięcie
Connection
jest niezwykle ważne. Jeśli nie zamykasz połączeń i otrzymujesz wiele z nich w krótkim czasie, baza danych może kończyć się połączenia, a twoja aplikacja może się zepsuć. Zawsze zdobywajConnection
wtry-with-resources
oświadczeniu . Lub jeśli nie jesteś jeszcze na Java 7, wyraźnie zamknąć go wfinally
ztry-finally
bloku. Zamknięciefinally
ma na celu zapewnienie zamknięcia również w przypadku wyjątku. Dotyczy to takżeStatement
,PreparedStatement
aResultSet
.To tyle, jeśli chodzi o łączność. Znajdziesz tutaj bardziej zaawansowany samouczek, jak ładować i przechowywać w pełni godne zaufania obiekty modelu Java w bazie danych przy pomocy podstawowej klasy DAO.
Używanie wzorca singletonu dla połączenia DB jest złym podejściem. Zobacz między innymi pytania: http://stackoverflow.com/q/9428573/ . Jest to błąd nr 1 na początek.
źródło
Zainicjuj stałe bazy danych
Utwórz stałą nazwę użytkownika bazy danych, hasło, adres URL i sterowniki, limit odpytywania itp.
Zainicjuj połączenie i właściwości
Po nawiązaniu połączenia lepiej jest przechowywać w celu ponownego użycia.
Utwórz właściwości
Obiekt właściwości przechowuje informacje o połączeniu, sprawdź, czy jest już ustawiony.
Połącz bazę danych
Teraz połącz się z bazą danych, używając zainicjowanych stałych i właściwości.
Odłącz bazę danych
Po zakończeniu operacji na bazie danych po prostu zamknij połączenie.
Wszystko razem
Użyj tej klasy
MysqlConnect
bezpośrednio po zmianie nazwy bazy danych, nazwy użytkownika i hasła itp.Jak używać?
Zainicjuj klasę bazy danych.
Gdzie indziej w twoim kodzie ...
To wszystko :) Jeśli coś poprawić, edytuj! Mam nadzieję, że to jest pomocne.
źródło
com.mysql.jdbc.Driver
tegojdbc:mysql://localhost:3306/stocks
należy zastosować, ponieważ ten pierwszy jest przestarzały.źródło
Oto minimalne zapotrzebowanie na dane z bazy danych MySQL:
Dodaj obsługę wyjątków, konfigurację itp. Do smaku.
źródło
Class.forName(...).newInstance()
?Połączenie MySQL JDBC z useSSL.
źródło
musisz mieć słoik łącznika mysql w ścieżce klasy.
w Java JDBC API tworzy wszystko z bazami danych. za pomocą JDBC możemy pisać aplikacje Java do
1. Wysyłania zapytań lub aktualizacji SQL do DB (dowolna relacyjna baza danych) 2. Pobieranie i przetwarzanie wyników z DB
poniżej trzech kroków możemy pobrać dane z dowolnej bazy danych
źródło
Krótki i słodki kod.
Dla SQL Server 2012
źródło
Connection
Użyłem jakiś czas temu, wyglądało to na najłatwiejszy sposób, ale było też zalecenie, aby złożyćif
oświadczenie - dokładnieLub coś w ten sposób :)
Prawdopodobnie jest jakaś sprawa, póki
getConnection
może wrócićnull
:)źródło
Można zobaczyć wszystkie czynności, aby podłączyć bazy danych MySQL z aplikacji Java tutaj . W przypadku innej bazy danych wystarczy zmienić sterownik tylko w pierwszym kroku. Upewnij się, że podałeś prawidłową ścieżkę do bazy danych oraz poprawną nazwę użytkownika i hasło.
Odwiedź http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA
źródło
Metoda 1: ustaw zmienną CLASSPATH.
W powyższym poleceniu ustawiłem CLASSPATH na bieżący folder i plik mysql-connector-java-VERSION.jar. Gdy więc
java MyClassFile
polecenie zostanie wykonane, program uruchamiający aplikację Java spróbuje załadować całą klasę Java w CLASSPATH. I okazało się, żeDrive
błędy klasy => BOOM zniknęły.Metoda 2:
Uwaga: Class.forName („com.mysql.jdbc.Driver”); To jest przestarzałe w tym momencie 2019 kwietnia.
Mam nadzieję, że to może komuś pomóc!
źródło
Połączenie JSBC MySql:
źródło
Pobierz sterownik JDBC
Link do pobrania (Wybierz niezależny od platformy): https://dev.mysql.com/downloads/connector/j/
Przenieś sterownik JDBC na dysk C.
Rozpakuj pliki i przejdź na dysk C: \. Twoja ścieżka sterownika powinna być jak
C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19
Uruchom swoją Javę
testMySQL.java
źródło
Krótki kod
źródło