Podłącz Javę do bazy danych MySQL
Jak połączyć się z bazą danych MySQL w Javie?
Kiedy próbuję, dostaję
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
14 answers
DriverManager
to dość stary sposób robienia rzeczy. Lepszym sposobem jest uzyskanie DataSource
, albo patrząc jeden, że kontener serwera aplikacji już skonfigurowany dla ciebie:
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");
Lub tworzenie instancji i konfigurowanie bezpośrednio ze sterownika bazy danych:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");
A następnie uzyskać z niego połączenia, takie same jak powyżej:
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-15 09:10:09
Aby dowiedzieć się, jak zainstalować MySQL i JDBC, należy zapoznać się z poniższymi instrukcjami:]}
Pobierz i zainstaluj serwer MySQL. Zrób to jak zwykle. Zapamiętaj numer portu za każdym razem, gdy go zmienisz. Domyślnie
3306
.-
Pobierz sterownik JDBC i umieść w classpath , rozpakuj plik ZIP i umieść plik zawierający JAR w classpath. Specyficzny dla dostawcy sterownik JDBC jest konkretną implementacją z JDBC API (tutorial tutaj ).
Jeśli używasz IDE, takiego jak Eclipse lub Netbeans, możesz dodać go do ścieżki klas poprzez dodanie pliku JAR jako Library do Build Path we właściwościach projektu.
Jeśli robisz to "plain vanilla" w konsoli poleceń, musisz określić ścieżkę do pliku JAR w argumencie
-cp
lub-classpath
podczas wykonywania aplikacji Java.java -cp .;/path/to/mysql-connector.jar com.example.YourClass
.
jest tylko do Dodaj katalog current do ścieżki classpath, aby mogła zlokalizowaćcom.example.YourClass
, a;
jest separatorem ścieżki classpath, tak jak jest to w systemie Windows. W Unix i klony:
powinny być używane. -
Tworzenie bazy danych W MySQL . Stwórzmy bazę danych
javabase
. Oczywiście chcecie dominacji nad światem, więc użyjmy również UTF-8.CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Tworzy użytkownika dla Javy i przyznaje it access. Po prostu dlatego, że używanie
root
jest złą praktyką.CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Tak,
java
to nazwa użytkownika, apassword
to 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 on 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 łącznością i używając127.0.0.1
zamiastlocalhost
rozwiązałeś to, to masz problem w konfiguracji sieci/DNS / hosts.port
: port TCP / IP, na którym serwer MySQL nasłuchuje. Jest to domyślnie3306
.databasename
: nazwa bazy danych, z którą chcesz się połączyć. Tojavabase
.
Więc ostateczny URL powinien wyglądać następująco:
jdbc:mysql://localhost:3306/javabase
-
Test the połączenie Z MySQL za pomocą Javy. Utwórz prostą klasę Java z metodą
main()
, aby przetestować połączenie.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ł wczytany automatycznie, albo adres URL JDBC jest nieprawidłowy (tzn. nie został rozpoznany przez żaden z załadowanych sterowników). Zwykle sterownik JDBC 4.0 powinien być automatycznie ładowany, gdy po prostu upuścisz go w runtime classpath. Aby wykluczyć jeden i drugi, zawsze można ręcznie załadować go 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); }
Uwaga że wywołanie
newInstance()
jest Nie potrzebne tutaj. Tylko po to, aby naprawić stary i buggyorg.gjt.mm.mysql.Driver
. Wyjaśnienie tutaj . Jeśli ta linia rzucaClassNotFoundException
, to plik JAR zawierający klasę sterownika JDBC po prostu nie zostanie umieszczony w classpath.Zauważ, że nie musisz ładować sterownika za każdym razem przed połączeniem. Wystarczy tylko jeden raz podczas uruchamiania aplikacji.
Jeśli otrzymasz
SQLException: Connection refused
lubConnection timed out
lub specyficzny dla MySQLCommunicationsException: Communications link failure
, to oznacza że DB nie jest osiągalny w ogóle. Może to mieć jedną lub więcej z następujących przyczyn:- adres IP lub nazwa hosta w JDBC URL jest błędny.
- Nazwa hosta w JDBC URL nie jest rozpoznawana przez lokalny serwer DNS.
- brak numeru portu lub błąd w JDBC URL.
- serwer DB nie działa.
- DB serwer nie akceptuje połączeń TCP / IP.
- na serwerze DB skończyły się połączenia.
- coś pomiędzy Javą a DB blokuje połączenia, np. a firewall lub proxy.
Aby rozwiązać jedno lub drugie, postępuj zgodnie z następującymi radami:]}
- zweryfikować i przetestować je za pomocą
ping
. - odśwież DNS lub użyj adresu IP w JDBC URL.
- zweryfikuj to na podstawie
my.cnf
MySQL DB. - Uruchom DB.
- sprawdź, czy mysqld jest uruchamiany bez
--skip-networking option
. - Uruchom ponownie DB i popraw kod odpowiednio, aby zamyka połączenia w
finally
. - Wyłącz firewall i / lub skonfigurować firewall / proxy, aby zezwolić / przekierować port.
Zauważ, że zamknięcie
Connection
jest niezwykle Ważne. Jeśli nie zamkniesz połączeń i w krótkim czasie uzyskasz ich wiele, w bazie danych może zabraknąć połączeń, a Twoja aplikacja może się zepsuć. Zawsze zdobądźConnection
wtry-with-resources
oświadczenie . Jeśli nie używasz jeszcze Javy 7, zamknij ją w blokufinally
try-finally
. Zamknięciefinally
jest tylko po to, aby zapewnić że zostanie zamknięta również w przypadku wyjątku. Dotyczy to równieżStatement
,PreparedStatement
iResultSet
.
To było to, jeśli chodzi o łączność. Możesz znaleźć tutaj bardziej zaawansowany samouczek Jak ładować i przechowywać fullworthy Java model objects w bazie danych za pomocą podstawowej klasy DAO.
Używanie wzorca Singletona dla połączenia DB jest złym podejściem. Zobacz między innymi: http://stackoverflow.com/q/9428573 / . to jest błędem # 1 starterów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-29 00:45:14
Inicjalizacja stałych bazy danych
Tworzenie stałych właściwości bazy danych nazwa użytkownika, hasło, adres URL i sterowniki, limit ankiety itp.
// init database constants
// com.mysql.jdbc.Driver
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250"; // set your own limit
Initialize Connection and Properties
Po nawiązaniu połączenia, lepiej jest przechowywać w celu ponownego użycia.
// init connection object
private Connection connection;
// init properties object
private Properties properties;
Tworzenie Właściwości
Obiekt properties przechowuje informacje o połączeniu, sprawdza czy jest już ustawione.
// create properties
private Properties getProperties() {
if (properties == null) {
properties = new Properties();
properties.setProperty("user", USERNAME);
properties.setProperty("password", PASSWORD);
properties.setProperty("MaxPooledStatements", MAX_POOL);
}
return properties;
}
Połącz bazę danych
Teraz połącz się z bazą danych korzystanie z zainicjalizowanych stałych i właściwości.
// connect database
public Connection connect() {
if (connection == null) {
try {
Class.forName(DATABASE_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, getProperties());
} catch (ClassNotFoundException | SQLException e) {
// Java 7+
e.printStackTrace();
}
}
return connection;
}
Odłącz bazę danych
Po zakończeniu operacji bazy danych, po prostu zamknij połączenie.
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Wszystko razem
Użyj tej klasy MysqlConnect
bezpośrednio po zmianie nazwy bazy danych, nazwy użytkownika i hasła itp.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class MysqlConnect {
// init database constants
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250";
// init connection object
private Connection connection;
// init properties object
private Properties properties;
// create properties
private Properties getProperties() {
if (properties == null) {
properties = new Properties();
properties.setProperty("user", USERNAME);
properties.setProperty("password", PASSWORD);
properties.setProperty("MaxPooledStatements", MAX_POOL);
}
return properties;
}
// connect database
public Connection connect() {
if (connection == null) {
try {
Class.forName(DATABASE_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, getProperties());
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
return connection;
}
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Jak używać?
Zainicjalizuj klasę bazy danych.
// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();
Gdzie indziej w Twoim kodzie ...
String sql = "SELECT * FROM `stackoverflow`";
try {
PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql);
... go on ...
... go on ...
... DONE ....
} catch (SQLException e) {
e.printStackTrace();
} finally {
mysqlConnect.disconnect();
}
To wszystko :) jeśli wszystko do poprawy edytuj to! Mam nadzieję, że to pomoże.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-07 03:06:14
String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase";
String user = "username";
String password = "password";
// Load the Connector/J driver
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Establish connection to MySQL
Connection conn = DriverManager.getConnection(url, user, password);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-15 07:43:10
Oto minimum potrzebne do uzyskania danych z bazy danych MySQL:
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/foo", "root", "password");
Statement stmt = conn.createStatement();
stmt.execute("SELECT * FROM `FOO.BAR`");
stmt.close();
conn.close();
Dodaj obsługę wyjątków, konfigurację itp. do smaku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-15 07:48:24
Połączenie MySQL JDBC z useSSL.
private String db_server = BaseMethods.getSystemData("db_server");
private String db_user = BaseMethods.getSystemData("db_user");
private String db_password = BaseMethods.getSystemData("db_password");
private String connectToDb() throws Exception {
String jdbcDriver = "com.mysql.jdbc.Driver";
String dbUrl = "jdbc:mysql://" + db_server +
"?verifyServerCertificate=false" +
"&useSSL=true" +
"&requireSSL=true";
System.setProperty(jdbcDriver, "");
Class.forName(jdbcDriver).newInstance();
Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password);
Statement statement = conn.createStatement();
String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\"";
ResultSet resultSet = statement.executeQuery(query);
resultSet.next();
return resultSet.getString(1);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-18 15:02:34
Musisz mieć mysql connector jar w swojej classpath.
W Javie JDBC API robi wszystko z baz danych. używając JDBC możemy pisać aplikacje Java do
1. Wysyłanie zapytań lub aktualizowanie SQL do DB (dowolnej relacyjnej bazy danych)
2. Pobieranie i przetwarzanie wyników z DB
Poniżej trzech kroków możemy pobrać dane z dowolnej bazy danych
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-15 13:56:23
Możesz zobaczyć wszystkie kroki, aby połączyć bazę danych MySQL z aplikacji Java tutaj . W przypadku innej bazy danych wystarczy zmienić Sterownik tylko w pierwszym kroku. Upewnij się, że podasz właściwą ścieżkę do bazy danych oraz poprawną nazwę użytkownika i hasło.
Visit http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-13 06:15:03
Krótki i słodki kod.
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver Loaded");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root","");
//Database Name - testDB, Username - "root", Password - ""
System.out.println("Connected...");
} catch(Exception e) {
e.printStackTrace();
}
Dla SQL server 2012
try {
String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123";
//KHILAN is Host and 1433 is port number
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("Driver Loaded");
conn = DriverManager.getConnection(url);
System.out.println("Connected...");
} catch(Exception e) {
e.printStackTrace();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-10 13:02:07
Connection
używałem jakiś czas temu, wyglądało to jak najprostszy sposób, ale były też zalecenia, aby tam if
oświadczenie-dokładnie
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
if (con != null){
//..handle your code there
}
Albo coś w tym stylu:)
Prawdopodobnie jest jakiś przypadek, podczas gdy getConnection
może wrócić null
:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-28 09:50:13
Jak
- aby ustawić sterownik tak, aby uruchamiał szybką próbkę
1. Go to https://dev.mysql.com/downloads/connector/j/, get the latest version of Connector/J
2. Remember to set the classpath to include the path of the connector jar file.
If we don't set it correctly, below errors can occur:
No suitable driver found for jdbc:mysql://127.0.0.1:3306/msystem_development
java.lang.ClassNotFoundException: com.mysql.jdbc:Driver
- aby ustawić CLASSPATH
Metoda 1: ustawia zmienną CLASSPATH.
export CLASSPATH=".:mysql-connector-java-VERSION.jar"
java MyClassFile
W powyższym poleceniu ustawiłem CLASSPATH do bieżącego folderu i mysql-connector-java-VERSION.plik jar. Tak więc po wykonaniu polecenia java MyClassFile
, uruchamiający aplikację java spróbuje załadować całą klasę Java w CLASSPATH.
I okazało się, że błędy Drive
class = > BOOM zniknęły.
Metoda 2:
java -cp .:mysql-connector-java-VERSION.jar MyClassFile
Uwaga: Klasa.forName ("com.mysql.jdbc.W tym momencie jest to przestarzałe 2019 Apr.
Mam nadzieję, że to może komuś pomóc!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-24 13:12:00
Połączenie MySql JDBC:
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password");
Statement stmt=con.createStatement();
stmt = con.createStatement();
ResultSet rs=stmt.executeQuery("Select * from Table");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 17:13:16
Krótki Kod
public class DB {
public static Connection c;
public static Connection getConnection() throws Exception {
if (c == null) {
Class.forName("com.mysql.jdbc.Driver");
c =DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASE", "USERNAME", "Password");
}
return c;
}
// Send data TO Database
public static void setData(String sql) throws Exception {
DB.getConnection().createStatement().executeUpdate(sql);
}
// Get Data From Database
public static ResultSet getData(String sql) throws Exception {
ResultSet rs = DB.getConnection().createStatement().executeQuery(sql);
return rs;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-17 11:21:34
Pobierz sterownik JDBC
Link do pobrania (Select platform independent): https://dev.mysql.com/downloads/connector/j/
Przenieś sterownik JDBC na dysk C
Rozpakuj pliki i przejdź do C:\ drive. Twoja ścieżka kierowcy powinna być taka jak C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19
Uruchom Swoją Javę
java -cp "C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19.jar" testMySQL.java
TestMySQL.java
import java.sql.*;
import java.io.*;
public class testMySQL {
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/db?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","root","");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("show databases;");
System.out.println("Connected");
}
catch(Exception e)
{
System.out.println(e);
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-22 11:29:16