Ich arbeite daran, dass meine Datenbank mit meinen Java-Programmen kommuniziert.
Kann mir jemand mit dem JDBC ein schnelles und schmutziges Beispielprogramm geben?
Ich bekomme einen ziemlich erstaunlichen Fehler:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at SqlTest.main(SqlTest.java:22)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
... 12 more
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:218)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
... 13 more
Inhalt der Testdatei:
import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlTest {
public static void main(String [] args) throws Exception {
// Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// // edit the jdbc url
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/projects?user=user1&password=123");
// Statement st = conn.createStatement();
// ResultSet rs = st.executeQuery( "select * from table" );
System.out.println("Connected?");
}
}
Antworten:
Also hast du eine
Ich zitiere aus dieser Antwort, die auch ein schrittweises MySQL + JDBC-Tutorial enthält:
Siehe auch:
quelle
Ich fange diese Ausnahme ab, wenn Java keinen Heap mehr hat. Wenn ich versuche, viele Datenelemente in den Arbeitsspeicher zu stellen, erhalte ich zuerst " Kommunikationsverbindungsfehler " und dann " OutOfMemoryError ".
Ich habe es protokolliert und den Speicherverbrauch verringert (1/2 Daten löschen) und alles in Ordnung.
quelle
In meinem Fall musste Localhost durch die tatsächliche IP-Adresse des Datenbankservers ersetzt werden
Anstatt
ich brauchte
quelle
Diese
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
Ausnahme tritt auf, wenn Ihre Datenbankverbindung längere Zeit inaktiv ist.Diese Leerlaufverbindung gibt true zurück,
connection.isClosed();
aber wenn wir versuchen, eine Anweisung auszuführen, wird diese Ausnahme ausgelöst, sodass ich vorschlagen werde, mit dem Datenbank-Pooling fortzufahren.quelle
Ich habe seit Stunden das gleiche Problem. Ich benutze MAMP Server
Verwenden Sie anstelle von localhost: [Apache Port] Ihren MySQL-Port.
Unten finden Sie den Standard-MySQL-Port für den MAMP-Server.
quelle
Ich belle hier möglicherweise den falschen Baum an, aber Ihre Ausnahme scheint darauf hinzudeuten, dass Ihr MySQL-Server nicht verfügbar ist.
Was passiert, wenn Sie es versuchen (vom Terminal)
Sie werden aufgefordert, das mit dem Benutzernamen verknüpfte Kennwort einzugeben. Nachdem Sie das richtige Passwort eingegeben haben, stellt der MySQL-Client eine Verbindung her?
Möglicherweise müssen Sie MySQL in den Einstellungen starten, wenn nicht. Sie können es auch so einstellen, dass es beim Start ausgeführt wird.
quelle
localhost
ich den richtigen Benutzernamen / das richtige Passwort und es funktioniert einwandfrei.In meinem Fall stellte sich heraus, dass die Version von
mysql-connector-java
zu alt war.In meiner Demo verwende ich irgendwie Folgendes
mysql-connector-java
:Aber in der Entwicklungsumgebung verwende ich Folgendes:
Und meine MySQL-Version war 5.1.48 (ja, es ist alt, nur um die Produktversion nachzuahmen). Also habe ich den gleichen Fehler getroffen.
Da der Grund gefunden wird, wird auch die Lösung gefunden. Passen Sie die Version an!
quelle
Ich habe den gleichen Fehler erhalten, weil ich versucht habe, mein Programm auszuführen, ohne den MySQL-Server zu starten.
Nach dem Start des MySQL-Servers lief alles richtig.
quelle
Frühere Antworten sind angebracht. Ich möchte aber auch auf ein allgemeineres Thema hinweisen.
Ich hatte ein ähnliches Problem und der Grund war eine Netzwerkeinschränkung meines Unternehmens.
Dieselbe Verbindung wurde erfolgreich, wenn ich mich in einem anderen Netzwerk befand.
quelle
Bitte aktualisieren Sie Ihre IP-Adresse in der Datei /etc/mysql/my.cnf
Starten Sie die Dienste mysql deamon und mysql neu.
quelle
Laden Sie MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' von 'mysql-connector-java-5.1.11.zip') unter MySQL herunter .
Sie müssen die Treiber-JAR während der Kompilierungs- und Laufzeit in Ihrem Klassenpfad einfügen.
quelle
Dieser Fehler kann auch auftreten, wenn Java versucht, über SSL eine Verbindung zu MySQL herzustellen, aber etwas schief geht. (In meinem Fall habe ich Payara Server 5.193.1-Verbindungspools für MySQL konfiguriert.)
Einige Leute schlugen eine Einstellung vor
useSSL=false
. Seit der Connector / J-Version8.0.13
ist diese Einstellung jedoch veraltet. Hier ist ein Auszug aus den Konfigurationseigenschaften von MySQL Connector / J 8.0 :In meinem Fall war die Einstellung
sslMode=DISABLED
alles, was ich brauchte, um das Problem zu beheben. Dies war auf einer Testmaschine. Für die Produktion wäre die sichere Lösung jedoch, den Java-Client und den MySQL-Server ordnungsgemäß für die Verwendung von SSL zu konfigurieren.Beachten Sie, dass Sie durch Deaktivieren von SSL möglicherweise auch festlegen müssen
allowPublicKeyRetrieval=true
. (Auch hier keine kluge Entscheidung aus Sicherheitsgründen). Weitere Informationen finden Sie in den MySQL ConnectionString-Optionen :quelle
Mein gleiches Problem wird durch die folgenden Schritte gelöst:
Gehe zu
my.cnf
Ändern Sie die Bindungsadresse
Starten Sie MySQL neu
quelle
Wenn Sie mit
WAMP
oderXAMP
Server MySQL - Datenbank zu installieren. Dann müssen Sie MySQL explizit starten, andernfalls wird es angezeigt,com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
während Sie sich mit der Datenbank verbindenquelle
Ich habe dieses Problem auf einfache Weise gelöst, das hat bei mir funktioniert. Ich hatte das Seme-Problem "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler". In meiner Datei db.properties hatte ich Folgendes: url: jdbc: mysql: // localhost: 90 / myDB, entfernte nur die Port-URL, was auf diese Weise zu url: jdbc: mysql: // localhost / myDB führte, und das funktionierte für mich .
quelle
Das ist mir passiert, als ich den MySQL-Port in den Dateien my.ini und php.ini von 3306 auf 3307 geändert habe, aber nachdem ich die Ports (3307-> 3306) wieder geändert habe, hat es wieder gut funktioniert.
quelle
Wenn Sie Ihren Port geändert haben, wird die Fehlermeldung "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler" angezeigt. Überprüfen Sie Ihre Portnummer
quelle
Habe das gerade erlebt.
Ich muss dafür sorgen, dass es funktioniert durch: (Dies kann im statischen Block-Intializer platziert werden.)
Auch durch Erhalten der Verbindung durch:
anstatt die Anmeldeparameter anzugeben
Grüße.
quelle
Versuchen Sie , ändern
localhost
zu127.0.0.1
.Der localhost wäre dazu entschlossen
::1
. Und MySQL kann standardmäßig nicht über IPv6 verbunden werden.Und hier ist die Ausgabe von
telnet localhost 3306
:Und es gibt keine Antwort vom MySQL-Server.
Stellen Sie natürlich sicher, dass Ihr MySQL-Server ausgeführt wird.
quelle
Wenn MySQL Version 8 oder höher Benutzer aktualisiert Connector
quelle
Für Remote - Anruf zu Mysql
Fügen Sie einen Remote-Benutzer zu MySQL hinzu, z. B. IP = remoteIP:
Allow Remote - Zugriff auf Mysql (standardmäßig alle externall Anruf nicht erlaubt ist):
Für die neueste Version des JDBC-Treibers, den JDBC:
quelle
Ich hatte das gleiche Problem und hier ist, wie es behoben wurde:
ResultSet (getString("columnName"))
, die nicht mit den Spaltennamen in meiner Datenbank übereinstimmten.Ich bin mir nicht ganz sicher, welches das Problem behoben hat, aber es hat funktioniert. Auch sicher sein , dass Sie eine neue erstellen
Statement
undResultSet
für jede Tabelle Abfrage.quelle
Es könnte ein einfaches Glasproblem sein. Möglicherweise verwenden Sie eine alte
mysql-connector-java-XXX-bin.jar
Version, die von Ihrer aktuellen MySQL-Version nicht unterstützt wird. Ich habe verwendet,mysql-connector-java-5.1.18-bin.jar
wie ich benutzemysql 5.5
und dieses Problem ist für mich gelöst.quelle
Möglicherweise haben Sie MySQL und Apache Server nicht gestartet. Nachdem ich Apache Server und MySQL über die XAMPP-Systemsteuerung gestartet hatte, wurde die Verbindung erfolgreich hergestellt.
Viel Glück!
quelle
Was für mich gelöst wurde, ist zwei Dinge zu tun: 1. Erstellen Sie einen neuen Benutzer außer root mit einem Passwort unter Verwendung der folgenden Konnads:
2. Kommentar IP-Adresszeile auf mysqld.conf
Verbinden Sie sich dann mit einem neuen Benutzernamen und Passwort. es sollte funktionieren.
quelle
Es wurde versucht, eine Verbindung zu einer älteren Version von MySQL herzustellen ('version', '5.1.73'). Wenn Sie eine neuere Treiberversion verwenden , wird eine Fehlermeldung angezeigt , die Sie auffordert, den "com.mysql.cj.jdbc.Driver" zu verwenden, oder sogar, dass Sie nicht angeben müssen, welche Sie verwenden:
Ich habe die Deklaration geändert, um die Version 5.1.38 des mysql-connector-java zu verwenden, und im Code habe ich den com.mysql.jdbc.Driver beibehalten .
Alles begann, als ich die Antwort des Ankit Jain sah
quelle
Meine Firewall blockierte Post 3307, die mein MySQL abhörte. Also habe ich den Port von 3307 auf 3306 geändert. Dann kann ich erfolgreich eine Verbindung zu einer Datenbank herstellen.
quelle
In meinem MacBook habe ich diesen Fehler nur behoben, wenn ich die neue Version von Eclipse EE neu installiere und lokale Server wie xamp mysql oder mamp entferne, aber nur einen davon verwende ...
quelle
In meinem Fall musste ich einen SSH-Tunnel zur entfernten Datenbank einrichten und alle Einstellungen waren korrekt und das Testen der Verbindung mit PhpStorm war ebenfalls erfolgreich. Und auch das Schema wurde geladen, aber nicht die Daten. Stattdessen bekam ich:
Keiner der oben genannten Vorschläge hat funktioniert. Aus irgendeinem Grund habe ich versucht, das Problem zu lösen, indem ich einfach PhpStorm neu gestartet habe und voila es hat funktioniert!
quelle
Ich habe mehrere Fehler erhalten, wie zum Beispiel:
CommunicationsException: Communications link failure
java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at
.Ich musste hinzufügen:
In AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
direkt nach dem öffnenden Manifest-Tag einschließen .Fügen Sie den JDBC-Treiber zu Ihren Gradle- (oder Maven-) Abhängigkeiten hinzu.
quelle