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
Author: Mark Rotteveel, 2010-05-15

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();
 215
Author: Sean Owen,
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:]}

  1. Pobierz i zainstaluj serwer MySQL. Zrób to jak zwykle. Zapamiętaj numer portu za każdym razem, gdy go zmienisz. Domyślnie 3306.

  2. 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.

  3. 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;
    
  4. 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, a password to hasło.

  5. 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 jak 127.0.0.1. Jeśli napotkasz problemy z łącznością i używając 127.0.0.1 zamiast localhost 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ślnie 3306.

    • databasename: nazwa bazy danych, z którą chcesz się połączyć. To javabase.

    Więc ostateczny URL powinien wyglądać następująco:

    jdbc:mysql://localhost:3306/javabase
  6. 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 buggy org.gjt.mm.mysql.Driver. Wyjaśnienie tutaj . Jeśli ta linia rzuca ClassNotFoundException, 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 lub Connection timed out lub specyficzny dla MySQL CommunicationsException: 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:

    1. adres IP lub nazwa hosta w JDBC URL jest błędny.
    2. Nazwa hosta w JDBC URL nie jest rozpoznawana przez lokalny serwer DNS.
    3. brak numeru portu lub błąd w JDBC URL.
    4. serwer DB nie działa.
    5. DB serwer nie akceptuje połączeń TCP / IP.
    6. na serwerze DB skończyły się połączenia.
    7. 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:]}

    1. zweryfikować i przetestować je za pomocą ping.
    2. odśwież DNS lub użyj adresu IP w JDBC URL.
    3. zweryfikuj to na podstawie my.cnf MySQL DB.
    4. Uruchom DB.
    5. sprawdź, czy mysqld jest uruchamiany bez --skip-networking option.
    6. Uruchom ponownie DB i popraw kod odpowiednio, aby zamyka połączenia w finally.
    7. 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 w try-with-resources oświadczenie . Jeśli nie używasz jeszcze Javy 7, zamknij ją w bloku finally try-finally. Zamknięcie finally jest tylko po to, aby zapewnić że zostanie zamknięta również w przypadku wyjątku. Dotyczy to również Statement, PreparedStatement i ResultSet.

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.

 491
Author: BalusC,
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.

 43
Author: Madan Sapkota,
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);
 25
Author: heffaklump,
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.

 12
Author: Kilian Foth,
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);
}
 3
Author: AJC,
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");
}
 2
Author: kapil das,
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

 2
Author: Jwalant,
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();
}
 2
Author: KhiLan PaTeL,
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 :)

 1
Author: xxxvodnikxxx,
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!

 1
Author: Nhat Dinh,
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");  
 -1
Author: Sarat Chandra,
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;
    }
}
 -1
Author: Corrupted_S.K,
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);
        }

    }  

}

Tutaj wpisz opis obrazka

 -1
Author: Chew Zai,
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