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
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();
Hier finden Sie eine schrittweise Erklärung, wie Sie MySQL und JDBC installieren und verwenden:
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
.
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.
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;
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.
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
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:
Befolgen Sie die folgenden Hinweise, um das eine oder andere Problem zu lösen:
ping
.my.cnf
in MySQL DB.--skip-networking option
gestartet wurde.finally
geschlossen werden.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.
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
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;
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;
}
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;
}
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();
}
}
}
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();
}
}
}
}
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.
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);
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.
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);
}
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();
}
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
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");
}
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 getConnection
null
zurückgeben kann :)
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");
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
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!