com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: İletişim bağlantısı hatası


227

Java programları ile konuşmak için veritabanımı almak üzerinde çalışıyorum.

Birisi bana JDBC kullanarak hızlı ve kirli bir örnek program verebilir?

Oldukça muazzam bir hata alıyorum:

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

Test dosyasının içeriği:

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

17
Ben aptaldım. MySQL sunucusu başlatılmadı :(
Başlatıldıktan

Yanıtlar:


253

Yani, bir

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: İletişim bağlantısı hatası
java.net.ConnectException: Bağlantı reddedildi

Ayrıca adım adım MySQL + JDBC öğreticisi içeren bu cevaptan alıntı yapıyorum :

Bir SQLException: Connection refusedveya Connection timed outMySQL'e özel alırsanız CommunicationsException: Communications link failure, DB'ye hiç ulaşılamaz demektir. Bu, aşağıdaki nedenlerden bir veya daha fazlasına sahip olabilir:

  1. JDBC URL'sindeki IP adresi veya ana bilgisayar adı yanlış.
  2. JDBC URL'sindeki ana bilgisayar adı yerel DNS sunucusu tarafından tanınmıyor.
  3. JDBC URL'sinde bağlantı noktası numarası eksik veya yanlış.
  4. DB sunucusu kapalı.
  5. DB sunucusu TCP / IP bağlantılarını kabul etmez.
  6. DB sunucusunun bağlantıları tükendi.
  7. Java ve DB arasındaki bir şey, örneğin bir güvenlik duvarı veya proxy gibi bağlantıları engellemektir.

Birini veya diğerini çözmek için aşağıdaki önerileri uygulayın:

  1. Bunları doğrulayın ve test edin ping.
  2. DNS'yi yenileyin veya bunun yerine JDBC URL'sinde IP adresi kullanın.
  3. my.cnfMySQL DB tabanlı olduğunu doğrulayın .
  4. DB'yi başlatın.
  5. Mysqld öğesinin --skip-networking option.
  6. DB'yi yeniden başlatın ve kodunuzu bağlantılarını kapatacak şekilde düzeltin finally.
  7. Güvenlik duvarını devre dışı bırakın ve / veya bağlantı noktasına izin vermek / yönlendirmek için güvenlik duvarını / proxy'yi yapılandırın.

Ayrıca bakınız:


4
MAMP / MAMP Pro varsayılan olarak MAMP_kip-networking_MAMP öğesini ayarlar. Bu satırı my.cfn
Jurik

6
Bu durumda değil, ancak bir Bağlantı Havuzu kullandığınızda ve uzun süre kullanılmadığı için bağlantılar kapatıldığında İletişim Bağlantı Hatası da oluşur. Sadece bu durumda, "Son paket bazı" X "saniye önce alındı" diyor
nikel

@nikel "Seç 1" doğrulama sorgusunu tetikleyerek bağlantı havuzundaki iş parçacıkları etkin tutulmamalı mı? Evictor'ı mysql sunucusu zaman aşımından daha kısa zaman aralıklarında çalışacak şekilde ayarladığımızda neden uzun süre hareketsiz kaldıklarında kapanıyorlar?
Farhad

Evet, bir doğrulama sorgusu bunu düzeltir.
nikel

Bazen bağlantı dizesinde bağlantı noktası eksik ve sürücü varsayılan 3306 mysql bağlantı noktasına bağlanmaya çalışacak ve mysql bu bağlantı noktasında çalışmıyorsa başarısız olacaktır. Bu benim sorunum öyleyse ben başka birisi yararlı bulacaksınız durumunda bahsetmeliyim.
Abdul Mannan

10

Java yığın dışındayken bu istisnayı yakalarım. RAM'de birçok veri öğesini koymaya çalışırsam - önce " İletişim bağlantısı hatası " ve ardından " OutOfMemoryError " yakalarım .

Oturum açtım ve bellek tüketimini azaltıyorum (1/2 veriyi sil) ve hepsi tamam.


9

Benim durumumda, gerçek veritabanı sunucusu IP adresine bir Localhost değişikliği yapmam gerekiyordu

Onun yerine

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

ihtiyacım vardı

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");

4/5/18 Son Güncelleme: Şu anda, MySQL Workbench 6.3 kullanıyorum. Buraya çözümü kontrol etmek için geldim ama kendi başıma buldum, sadece MySQL sunucunuz çalışmıyor veya durdurulmuş. Ben bir cazibe gibi çalıştı sunucumu yeniden başlattı.
Abhishek Ekaanth

7
Bu 'en iyi çözüm' neden? Hangi sorunu çözüyor ve nasıl?
Lorne Marquis

bu çözüm veri çerçeveleri oluşturamaz
Alan

8

Bu com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionözel durum, veritabanı bağlantınız uzun süre boşta kalırsa oluşur.

Bu boş bağlantı true döndürür connection.isClosed();ama deyimi yürütmeye çalışırsanız, bu durumda veritabanı havuzu ile gitmek için önerecektir bu istisna ateşleyecektir.


2
Ayrıca 'bağlantı reddedildi' gibi diğer nedenlerle de ortaya çıkar.
Lorne Marquis

6

Saatlerce aynı problemi yaşıyorum. MAMP Server kullanıyorum

Localhost kullanmak yerine: [Apache Port], MySQL portunuzu kullanın.

MAMP sunucusu için varsayılan MySQL Portu aşağıdadır.

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);

Eğer Mysql yüklemeden önce mampon varsa o zaman bu yöntemi deneyin
DAVIS BENNY 15MIS0426

5

Burada yanlış ağacı havlıyor olabilirim, ancak istisnanın MySQL sunucunuzun mevcut olmadığını gösterdiği anlaşılıyor.

"Main" iş parçacığındaki istisna com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: İletişim bağlantısı hatası Sunucuya başarıyla gönderilen son paket 0 milisaniyeydi. Sürücü sunucudan hiçbir paket almadı. En ...

Eğer denerseniz (terminalden) ne olur

mysql -u username -p

Kullanıcı adıyla ilişkili şifreyi girmeniz istenir. Doğru şifreyi verdikten sonra mysql istemcisi bağlanıyor mu?

Aksi halde MySQL'i Tercihler'den başlatmanız gerekebilir. Ayrıca başlangıçta çalışacak şekilde de ayarlayabilirsiniz.


1
MySQL sunucumu çalıştırmak için MAMP kullanıyorum. Bu bir sorun olur mu?
Josh K

(Sıra Pro ile) bağlandığımda localhostdoğru kullanıcı adını / şifreyi kullanıyorum ve iyi çalışıyor.
Josh K

5

Benim durumumda, sürümü mysql-connector-javaçok eski olduğu ortaya çıktı.

Demomda bir şekilde şöyle kullanıyorum mysql-connector-java:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

Ancak geliştirme ortamında şunu kullanıyorum:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

Ve MySQL sürümüm 5.1.48 idi (evet, eski, sadece ürün sürümünü taklit etmek için). Ben de aynı hatayla karşılaştım.

Sebep bulunduğundan çözüm de bulunur. Sürümü eşleştirin!


4
Olası olmayan. Tüm bu sürücü sürümlerinin geriye dönük uyumlu olması gerekir.
Lorne Marquis

1
Bu sorun yeni mysql konektörlerinde giderilmiş gibi görünüyor, bkz. Stackoverflow.com/questions/14559794/…
Nishi

Benim için de aynı durum. Sunucunun sürümü 8 iken sürücünün sürümü MySQL 5 içindir. Bu yüzden kavanozun sürümünü güncelledim ve sorun çözüldü.
edenPan

4

Aynı hatayı aldım çünkü mysql sunucusunu başlatmadan programımı çalıştırmaya çalışıyordum.

MySQL sunucusunu başlattıktan sonra her şey yolunda gitti.


4

Daha önceki cevaplar uygundur. Ancak daha genel bir konuya da işaret etmek istiyorum.

Benzer bir sorunla karşılaştım ve bunun nedeni şirketimin bir ağ kısıtlamasıydı.

Başka bir ağdayken de aynı bağlantı başarılı oluyordu.


1
Bu işaretçi, VPN'e bağlandığımda 'localhost' çalıştığını belirterek sorunumu çözdü, ancak VPN bağlantısını
kesersem

4

Lütfen /etc/mysql/my.cnf dosyasındaki IP adresinizi güncelleyin

bind-address  = 0.0.0.0

MySQL deamon ve MySQL hizmetlerini yeniden başlatın.


1
Geçerli bağlama adresini kullanmak için düzenlendi
OneCricketeer

3

Yükleme MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' 'mysql-connector-java-5.1.11.zip' dan) de MySQL .

Sınıf yolunuzda derleme ve çalışma zamanı sırasında sürücü kavanozu eklemeniz gerekir.

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );

Hayır, bana hiçbir şey bulamama konusunda bir hata fırtınası veriyor. Bunu JAR dosyası olmadan içe aktarmak mümkün müdür?
Josh K

@Josh bu işe yarıyor, gerçekten sadece sınıf yolunuzu düzgün bir şekilde ayarlamanız gerekiyor. (Veya kavanozu% JAVA_HOME% \ jre \ lib \ ext dizininize kopyalayın, ancak bu kötü uygulama olarak kabul edilir)
istifleyici

3

Bu hata, Java SSL üzerinden MySQL'e bağlanmaya çalışsa da bir şeyler ters giderse de oluşabilir. (Benim durumumda, Payara Server 5.193.1 bağlantı havuzlarını MySQL'e yapılandırıyordum.)

Bazı insanlar ayar önerdi useSSL=false. Ancak, Connector / J sürümünden beri 8.0.13bu ayar kullanımdan kaldırılmıştır. İşte MySQL Connector / J 8.0 Yapılandırma Özelliklerinden bir alıntı :

sslMode

Varsayılan olarak, ağ bağlantıları SSL ile şifrelenmiştir; bu özellik güvenli bağlantıların kapatılmasına veya farklı güvenlik düzeylerinin seçilmesine izin verir. Aşağıdaki değerlere izin verilir: DISABLED- Şifresiz bağlantılar oluşturun; PREFERRED- (varsayılan) Sunucu bunları etkinleştirdiyse şifreli bağlantılar kurun, aksi takdirde şifrelenmemiş bağlantılara geri dönün; REQUIRED- Sunucu bunları etkinleştirdiyse güvenli bağlantılar kurun, aksi halde başarısız olun; VERIFY_CA- REQUIREDSunucu TLS sertifikasını yapılandırılmış Sertifika Yetkilisi (CA) sertifikalarına benzer, ancak ek olarak doğrulayın; VERIFY_IDENTITY- Beğen VERIFY_CA, ancak ek olarak sunucu sertifikasının bağlantının denendiği ana bilgisayarla eşleştiğini doğrulayın.

Bu özellik kaldırılmış eski özelliklerini yerini useSSL, requireSSLve verifyServerCertificatehala bir değere kabul ama çevrilir, sslModeeğer sslMode: açıkça ayarlanmazsa useSSL=falseçevrilirsslMode=DISABLED ; {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}tercüme edilir sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}tercüme edilir sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}diline çevrilir sslMode=VERIFY_CA. İçin eşdeğer eski ayar yok sslMode=VERIFY_IDENTITY. TÜM sunucu sürümleri için, varsayılan ayar Not, yani sslModeolup PREFERREDve bu mirası ayarlarına eşdeğerdir useSSL=true, bazı durumlarda Bağlayıcı / J 8.0.12 için varsayılan ayarlarına farklı ve daha önceki hangi. Eski özellikleri kullanmaya devam eden ve eski varsayılan ayarlarına dayanan uygulamalar gözden geçirilmelidir.requireSSL=false veverifyServerCertificate=false

sslModeAçıkça ayarlanırsa eski özellikler yok sayılır . Hiçbiri sslModeveya useSSLaçıkça ayarlanmadıysa, varsayılan ayarı sslMode=PREFERREDgeçerlidir.

Varsayılan :PREFERRED

Sürümden beri : 8.0.13

Yani, benim durumumda, sslMode=DISABLEDsorunu çözmek için gereken tek şey buydu. Bu bir test makinesindeydi. Ancak üretim için güvenli çözüm, Java istemcisini ve MySQL sunucusunu SSL kullanacak şekilde yapılandırmak olacaktır.


SSL'yi devre dışı bırakarak, allowPublicKeyRetrieval=true . (Yine, güvenlik açısından akıllıca bir karar değil). Daha fazla bilgi MySQL ConnectionString Seçeneklerinde sağlanır :

AllowPublicKeyRetrieval

Kullanıcı hesabı sha256_passwordkimlik doğrulama kullanıyorsa , aktarım sırasında parolanın korunması gerekir; TLS bunun için tercih edilen mekanizmadır, ancak mevcut değilse RSA ortak anahtar şifrelemesi kullanılacaktır. Sunucunun RSA ortak anahtarını belirtmek için ServerRSAPublicKeyFilebağlantı dizesi ayarını kullanın veya AllowPublicKeyRetrieval=Trueistemcinin ortak anahtarı sunucudan otomatik olarak istemesine izin verecek şekilde ayarlayın . Not AllowPublicKeyRetrieval=Truekötü niyetli bir vekil, düz metin şifre almak için bir MITM saldırı gerçekleştirmek için izin verebilir bu nedenle varsayılan olarak False ve açıkça etkinleştirilmesi gerekir.



3

Aynı sorunum aşağıdaki adımlarla çözüldü:

  1. Adresine git my.cnf

    vi /etc/mysql/my.cnf
  2. Bağlama adresini değiştirme

    "bind-address = 0.0.0.0"
  3. MySQL'i yeniden başlat

    sudo /etc/init.d/mysql restart

2

Mysql veritabanı yüklemek için WAMPveya XAMPsunucu kullanıyorsanız . Sonra açıkça com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureveritabanı ile bağlanırken gösterecektir bilge diğer mysql sever başlatmak zorunda


2

Bu problemi kolay bir şekilde çözdüm, bu benim için çalıştı. "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: İletişim bağlantısı hatası" seme sorunu vardı. Benim db.properties dosyasında bu vardı: url: jdbc: mysql: // localhost: 90 / myDB, sadece url: jdbc: mysql: // localhost / myDB sonuçlanan bağlantı noktası url kaldırıldı ve bu benim için çalıştı .


2

My.ini ve php.ini dosyalarında mysql bağlantı noktasını 3306'dan 3307'ye değiştirdiğimde oldu, ancak bağlantı noktalarını (3307-> 3306) değiştirdikten sonra tekrar iyi çalıştı.


2

Bağlantı noktanızı değiştirdiyseniz, "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: İletişim bağlantısı hatası" şeklinde bir hata alırsınız Lütfen bağlantı noktası numaranızı kontrol edin


1

Sadece bunu deneyimledim.

Çalıştırmak için var: (Bu statik blok intializer yerleştirilebilir)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

Ayrıca bağlantıyı şu yolla elde ederek:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

giriş parametrelerini belirtmek yerine

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

Saygılarımızla.


2
Statik blok 2007'den beri gerekli değildir ve giriş parametrelerini her iki şekilde de belirleyebilirsiniz.
Lorne Marquis

1

Değiştirmeye çalışın localhostiçin 127.0.0.1.

Yerel ana bilgisayar çözülecekti ::1. Ve MySQL varsayılan olarak IPv6 ile bağlanamaz.

Ve işte çıktısı telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

Ve MySQL sunucusundan yanıt alınamıyor.

Tabii ki, lütfen MySQL sunucunuzun çalıştığından emin olun.


Bu aslında / etc / hosts dosyanızla ilgili bir sorun, Mysql
OneCricketeer

@ cricket_007 Varsayılan olarak, localhost 127.0.0.1 yerine :: 1 olarak çözümlenir.
Haozhe Xie

1
Tabii, sadece ipv6 etkinse ve hosts dosyasına bağlı olarak
OneCricketeer

1
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321

con = DriverManager.getConnection(dbhost, user, password);

mysql sürüm 8 veya üstü kullanıcı güncellenmiş bağlayıcı ise


Bu doğru cevaptır, MySQL 8 veya daha yüksek bir sürücüyü kullanırken bağlantı dizesine useSSL = false ekleyin.
Mohannd

1

İçin Uzaktan Mysql Çağrısı

  1. Ekle uzak kullanıcı için MySQL exemple IP = remoteip için gelen:

    mysql -u xxxx -p //local coonection to mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
    //Query OK, 0 rows affected (xx sec)
    mysql> FLUSH PRIVILEGES;
    //Query OK, 0 rows affected
  2. Mysql'e uzaktan erişime izin ver (varsayılan olarak tüm harici çağrılara izin verilmez):

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  bind-address = 0.0.0.0
    Restart Mysql: /etc/init.d/mysql restart
  3. JDBC Sürücüsünün en son sürümü için JDBC:

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'

0

Aynı sorunu yaşadım ve işte nasıl çözüldüğü:

  1. .Jsp'im, sunucu uygulamasında henüz tanımlamamış olan öznitelikleri çağırıyordu.
  2. ResultSet (getString("columnName"))Veritabanımdaki sütun adlarıyla eşleşmeyen bir nesneye geçirdiğim iki sütun adım vardı .

Hangisinin sorunu çözdüğünden tam olarak emin değilim, ama işe yaradı. Ayrıca, yeni Statementve ResultSether tablo sorgusu için oluşturduğunuzdan emin olun .


1
(1) kesinlikle bu soruna neden olmaz.
Lorne Marquis

0

Basit bir kavanoz problemi olabilir. mysql-connector-java-XXX-bin.jargeçerli mysql sürümünüz tarafından desteklenmeyen eski bir sürümü kullanıyor olabilirsiniz. Ben kullanıyorum mysql-connector-java-5.1.18-bin.jarolarak kullanılan mysql 5.5ve bu sorun benim için çözüldü.


1
Evet kavanoz uyumsuzluğu olasılığı vardır.
Kiran Nunna

Tüm bu sürücü sürümlerinin uyumlu olması gerekir.
Lorne Marquis

0

Belki Mysql ve Apache Sunucunuzu başlatmadınız. XAMPP Denetim Masası'ndan Apache sunucusu ve Mysql'i başlattıktan sonra bağlantı başarıyla kuruldu.

İyi şanslar!


0

Benim için ne çözüldü 2 şey yapıyor: 1. aşağıdaki connads kullanarak bazı şifre ile kök dışında yeni bir kullanıcı oluşturmak:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. mysqld.conf üzerinde IP adres satırını yorumlayın

ardından yeni kullanıcı adı ve şifre ile bağlanın. İşe yaramalı.


Bunu tüm uzak kullanıcılar için tekrarlamanız veya Localhost yerine bir joker karakter eklemeniz
gerekecek

0

MySQL'in daha eski bir sürümüne bağlanmaya çalışıyordu ('sürüm', '5.1.73'); daha yeni bir sürücü sürümü kullandığınızda "com.mysql.cj.jdbc.Driver'ı kullanmanızı, hatta hangisini kullandığınızı belirtmeniz gerekmediğini söyleyen bir hata alırsınız :

Yükleme sınıfı com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver '. Sürücü SPI aracılığıyla otomatik olarak kaydedilir ve sürücü sınıfının manuel olarak yüklenmesi genellikle gereksizdir.

Beyanı mysql-connector-java'nın 5.1.38 sürümünü kullanacak şekilde değiştirdim ve kodda com.mysql.jdbc.Driver'ı sakladım .

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

Her şey Ankit Jain'in cevabını görünce başladı


0

Güvenlik duvarım MySQL dinlediğim 3307 yazısını engelliyordu. Bu yüzden bağlantı noktasını 3307'den 3306'ya değiştirdim ve sonra bir veritabanına başarıyla bağlanabiliyorum.


0

MacBook'umda bu hatayı sadece eclipse EE'nin yeni sürümünü yeniden yükleyip xamp mysql veya mamp gibi yerel sunucuları kaldırdığımda çözüyorum ama bunlardan sadece birini kullanıyorum ...


0

Benim durumumda, uzak veritabanına bir ssh tüneli kurmak zorunda kaldım ve tüm ayarlar doğru ve PhpStorm ile bağlantı testi de başarılı oldu. Ve ayrıca şema yüklendi, ancak veriler yüklenmedi. Bunun yerine:

[08S01] 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.

Yukarıdaki önerilerin hiçbiri işe yaramadı. Herhangi bir sebepten dolayı PhpStorm'u yeniden başlatarak sorunu çözmeye çalıştım ve işe yaradı!


0

Gibi birden fazla hata alıyordum:

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

Eklemek zorunda kaldım:

  • AndroidManifest.xml dosyasında <uses-permission android:name="android.permission.INTERNET"/>açılış manifest etiketinden hemen sonra ekleyin .

  • JDBC sürücüsünü Gradle (veya Maven) bağımlılıklarınıza ekleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.