wake-up-neo.com

Verbinden Sie Java mit einer MySQL-Datenbank

Wie verbinde ich mich mit einer MySQL-Datenbank in Java?

Wenn ich es versuche, bekomme ich

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)

Oder

Java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Oder

Java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
306
abson

DriverManager ist eine ziemlich alte Art, Dinge zu tun. Der bessere Weg ist, eine DataSource zu erhalten, indem Sie entweder eine suchen, die Ihr App-Server-Container bereits für Sie konfiguriert hat:

Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("Java:comp/env/jdbc/myDB");

oder direkt über Ihren Datenbanktreiber instanziieren und konfigurieren:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");

und dann erhalten Sie Verbindungen von ihm, wie oben:

Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
197
Sean Owen

Hier finden Sie eine schrittweise Erklärung, wie Sie MySQL und JDBC installieren und verwenden:

  1. Download und installieren Sie den MySQL-Server . Mach es einfach wie gewohnt. Notieren Sie sich die Portnummer, wenn Sie sie geändert haben. Es ist standardmäßig 3306.

  2. Download den JDBC-Treiber und geben Sie den Klassenpfad ein , extrahieren Sie die Zip-Datei und fügen Sie die enthaltene JAR-Datei in den Klassenpfad ein. Der herstellerspezifische JDBC-Treiber ist eine konkrete Implementierung der JDBC-API ( Tutorial hier ).

    Wenn Sie ein IDE wie Eclipse oder Netbeans verwenden, können Sie es dem Klassenpfad hinzufügen, indem Sie die JAR-Datei als Library zur Pfad in den Projekteigenschaften erstellen.

    Wenn Sie es in der Kommandokonsole "Plain Vanilla" machen, müssen Sie den Pfad zur JAR-Datei im Argument -cp oder -classpath angeben, wenn Sie Ihr Java ausführen. Anwendung.

    Java -cp.;/Path/to/mysql-connector.jar com.example.YourClass

    Der . ist nur dazu da, das aktuelle Verzeichnis zum Klassenpfad hinzuzufügen, so dass er com.example.YourClass und der ; finden kann Klassenpfadtrennzeichen, wie es in Windows ist. In Unix und Clones sollte : verwendet werden.

  3. Erstellen Sie eine Datenbank in MySQL . Erstellen wir eine Datenbank javabase. Sie wollen natürlich World Domination, also verwenden wir auch UTF-8.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Benutzer erstellen für Java und gewähren für den Zugriff . Einfach, weil die Verwendung von root eine schlechte Praxis ist.

    CREATE USER 'Java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'Java'@'localhost' IDENTIFIED BY 'password';
    

    Ja, Java ist der Benutzername und password ist hier das Passwort.

  5. Ermitteln die JDBC-URL . Um die MySQL-Datenbank mit Java zu verbinden, benötigen Sie eine JDBC-URL in der folgenden Syntax:

    jdbc: mysql: // hostname: port/datenbankname
    • hostname: Der Hostname, auf dem der MySQL-Server installiert ist. Wenn es auf demselben Computer installiert ist, auf dem Sie den Code Java ausführen, können Sie einfach localhost verwenden. Es kann auch eine IP-Adresse wie 127.0.0.1 sein. Wenn Sie auf Verbindungsprobleme stoßen und 127.0.0.1 anstelle von localhost verwenden, liegt ein Problem in Ihrer Netzwerk-/DNS-/Hosts-Konfiguration vor.

    • port: Der TCP/IP-Port, an dem der MySQL-Server empfangsbereit ist. Dies ist standardmäßig 3306.

    • databasename: Der Name der Datenbank, zu der Sie eine Verbindung herstellen möchten. Das ist javabase.

    Die endgültige URL sollte also so aussehen:

    jdbc: mysql: // localhost: 3306/javabase
  6. Testen Sie die Verbindung zu MySQL mit Java . Erstellen Sie eine einfache Klasse Java mit einer Methode main(), um die Verbindung zu testen.

    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);
    }
    

    Wenn Sie einen SQLException: No suitable driver erhalten, bedeutet dies, dass entweder der JDBC-Treiber nicht automatisch geladen wurde oder dass die JDBC-URL falsch ist (d. H. Von keinem der geladenen Treiber erkannt wurde). Normalerweise sollte ein JDBC 4.0-Treiber automatisch geladen werden, wenn Sie ihn einfach im Laufzeitklassenpfad ablegen. Um eine oder andere auszuschließen, können Sie diese jederzeit wie folgt manuell laden:

    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);
    }
    

    Beachten Sie, dass der newInstance() -Aufruf hier nicht benötigt wird . Es ist nur, um den alten und fehlerhaften org.gjt.mm.mysql.Driver zu reparieren. Erklärung hier . Wenn diese Zeile ClassNotFoundException ausgibt, wurde die JAR-Datei mit der JDBC-Treiberklasse einfach nicht in den Klassenpfad eingefügt.

    Beachten Sie, dass Sie den Treiber nicht jedes Mal laden müssen, bevor Sie eine Verbindung herstellen . Nur ein einziges Mal während des Programmstarts ist ausreichend.

    Wenn Sie einen SQLException: Connection refused oder Connection timed out oder einen MySQL-spezifischen CommunicationsException: Communications link failure erhalten, bedeutet dies, dass die Datenbank überhaupt nicht erreichbar ist. Dies kann eine oder mehrere der folgenden Ursachen haben:

    1. Die IP-Adresse oder der Hostname in der JDBC-URL ist falsch.
    2. Der Hostname in der JDBC-URL wird vom lokalen DNS-Server nicht erkannt.
    3. Die Portnummer fehlt oder ist in der JDBC-URL falsch.
    4. Der DB-Server ist inaktiv.
    5. Der DB-Server akzeptiert keine TCP/IP-Verbindungen.
    6. Der DB-Server hat keine Verbindungen mehr.
    7. Etwas zwischen Java und DB blockiert Verbindungen, z. eine Firewall oder ein Proxy.

    Befolgen Sie die folgenden Hinweise, um das eine oder andere Problem zu lösen:

    1. Überprüfen und testen Sie sie mit ping.
    2. Aktualisieren Sie DNS oder verwenden Sie stattdessen die IP-Adresse in der JDBC-URL.
    3. Überprüfen Sie dies anhand von my.cnf in MySQL DB.
    4. Starten Sie den DB.
    5. Überprüfen Sie, ob mysqld ohne den --skip-networking option gestartet wurde.
    6. Starten Sie die Datenbank neu und korrigieren Sie Ihren Code entsprechend, damit Verbindungen in finally geschlossen werden.
    7. Deaktivieren Sie die Firewall und/oder konfigurieren Sie die Firewall/den Proxy, um den Port zuzulassen/weiterzuleiten.

    Beachten Sie, dass das Schließen der Connection äußerst wichtig ist . Wenn Sie Verbindungen nicht schließen und in kurzer Zeit immer wieder viele Verbindungen herstellen, gehen der Datenbank möglicherweise die Verbindungen aus und Ihre Anwendung kann abstürzen. Erwerben Sie immer den Connection in einer try-with-resources -Anweisung . Wenn Sie sich noch nicht in Java 7 befinden, schließen Sie es explizit in finally eines try-finally -Blocks. Das Schließen in finally dient nur dazu, sicherzustellen, dass es im Falle einer Ausnahme auch geschlossen wird. Dies gilt auch für Statement, PreparedStatement und ResultSet.

Das war es soweit die Konnektivität betrifft. Sie finden hier ein erweitertes Lernprogramm zum Laden und Speichern von vollwertigen Java Modellobjekten in einer Datenbank mit Hilfe einer grundlegenden DAO-Klasse.


Die Verwendung eines Singleton-Musters für die DB-Verbindung ist ein schlechter Ansatz. Siehe unter anderem: http://stackoverflow.com/q/9428573/ . Dies ist ein Startfehler Nummer 1.

455
BalusC

Datenbankkonstanten initialisieren

Erstellen Sie den Benutzernamen, das Passwort, die URL und die Treiber der Datenbank für konstante Eigenschaften, das Polling-Limit usw.

// init database constants
private static final String DATABASE_DRIVER = "com.mysql.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

Verbindung und Eigenschaften initialisieren

Sobald die Verbindung hergestellt ist, ist es besser, sie für Wiederverwendungszwecke zu speichern.

// init connection object
private Connection connection;
// init properties object
private Properties properties;

Eigenschaften erstellen

Das Eigenschaftenobjekt enthält die Verbindungsinformationen. Überprüfen Sie, ob diese bereits festgelegt sind.

// 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;
}

Verbinden Sie die Datenbank

Stellen Sie nun mit den initialisierten Konstanten und Eigenschaften eine Verbindung zur Datenbank her.

// 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;
}

Trennen Sie die Datenbank

Wenn Sie mit den Datenbankvorgängen fertig sind, schließen Sie einfach die Verbindung.

// disconnect database
public void disconnect() {
    if (connection != null) {
        try {
            connection.close();
            connection = null;
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Alles zusammen

Verwenden Sie diese Klasse MysqlConnect direkt nach dem Ändern von Datenbankname, Benutzername und Passwort usw.

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.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();
            }
        }
    }
}

Wie benutzt man?

Initialisieren Sie die Datenbankklasse.

// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();

An einer anderen Stelle in Ihrem Code ...

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();
}

Das ist alles :) Wenn etwas zu verbessern, bearbeiten Sie es! Hoffe das ist hilfreich.

35
Madan Sapkota
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);
23
heffaklump

Hier ist das Minimum, das Sie benötigen, um Daten aus einer MySQL-Datenbank abzurufen:

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();

Fügen Sie nach Belieben Ausnahmebehandlung, Konfiguration usw. hinzu.

13
Kilian Foth

MySQL JDBC-Verbindung mit 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);
}
4
AJC

Kurzer und süßer Code.

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();
    }

Für 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();
    }
3
KhiLan PaTeL

Sie können alle Schritte zum Herstellen einer Verbindung zur MySQL-Datenbank in der Anwendung Java sehen hier . Für andere Datenbanken müssen Sie den Treiber nur im ersten Schritt ändern. Bitte stellen Sie sicher, dass Sie den richtigen Pfad zur Datenbank und den richtigen Benutzernamen und das richtige Passwort angeben.

Besuchen Sie http://apekshit.com/t/51/Steps-to-connect-Database-using-Java

3
Jwalant

sie müssen mysql connector jar in Ihrem Klassenpfad haben.

in Java JDBC API macht alles mit Datenbanken. Mit JDBC können wir Java Anwendungen schreiben
1. Senden Sie Abfragen oder aktualisieren Sie SQL an DB (eine relationale Datenbank). 2. Rufen Sie die Ergebnisse von DB ab und verarbeiten Sie sie

mit den folgenden drei Schritten können wir Daten aus jeder Datenbank abrufen

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");
}
3
kapil das

Connection Ich habe es vor einiger Zeit benutzt, es sah nach dem einfachsten Weg aus, aber es gab auch eine Empfehlung, dort if eine genaue Aussage zu machen

Connection con = DriverManager.getConnection(
                     "jdbc:myDriver:DatabaseName",
                     dBuserName,
                     dBuserPassword);
if (con != null){
 //..handle your code there 
}

Oder so ähnlich :)

Wahrscheinlich gibt es einen Fall, während getConnectionnull zurückgeben kann :)

2
xxxvodnikxxx

MySQL JDBC-Verbindung:

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");  
0
Sarat Chandra
  • So richten Sie den Treiber so ein, dass ein schnelles Beispiel ausgeführt wird
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
  • So richten Sie den CLASSPATH ein

Methode 1: legen Sie die CLASSPATH-Variable fest.

export CLASSPATH=".:mysql-connector-Java-VERSION.jar"
Java MyClassFile

Im obigen Befehl habe ich CLASSPATH auf den aktuellen Ordner und die Datei mysql-connector-Java-VERSION.jar festgelegt. Wenn der Befehl Java MyClassFile ausgeführt wird, versucht der Anwendungsstarter Java, die gesamte Klasse Java in CLASSPATH zu laden. Und es wurde festgestellt, dass die Klasse Drive => BOOM-Fehler weg waren.

Methode 2:

Java -cp .:mysql-connector-Java-VERSION.jar MyClassFile

Hinweis: Class.forName ("com.mysql.jdbc.Driver"); Dies ist derzeit veraltet. 2019 Apr.

Hoffe das kann jemandem helfen!

0
Nhat Dinh