com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kegagalan tautan komunikasi

225

Saya sedang berupaya mendapatkan database saya untuk berbicara dengan program Java saya.

Dapatkah seseorang memberi saya contoh program cepat dan kotor menggunakan JDBC?

Saya mendapatkan kesalahan yang agak luar biasa:

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

Isi file uji:

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?");
    }
}
Josh K.
sumber
17
Saya bodoh. Server MySQL tidak dimulai :( Itu berhasil setelah memulainya.
akfaisel

Jawaban:

251

Jadi, Anda punya

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kegagalan tautan komunikasi
java.net.ConnectException: Sambungan ditolak

Saya mengutip dari jawaban ini yang juga berisi tutorial langkah-demi-langkah MySQL + JDBC:

Jika Anda mendapatkan SQLException: Connection refusedatau Connection timed outatau spesifik MySQL CommunicationsException: Communications link failure, maka itu berarti DB tidak dapat dijangkau sama sekali. Ini dapat memiliki satu atau lebih penyebab berikut:

  1. Alamat IP atau nama host di URL JDBC salah.
  2. Nama host di URL JDBC tidak dikenali oleh server DNS lokal.
  3. Nomor port tidak ada atau salah dalam URL JDBC.
  4. Server DB sedang down.
  5. Server DB tidak menerima koneksi TCP / IP.
  6. Server DB kehabisan koneksi.
  7. Sesuatu di antara Java dan DB memblokir koneksi, misalnya firewall atau proxy.

Untuk mengatasi yang satu atau yang lain, ikuti saran berikut:

  1. Verifikasi dan ujilah dengan ping.
  2. Segarkan DNS atau gunakan alamat IP dalam URL JDBC.
  3. Verifikasi berdasarkan my.cnfMySQL DB.
  4. Mulai DB.
  5. Verifikasi apakah mysqld dimulai tanpa --skip-networking option.
  6. Nyalakan kembali DB dan perbaiki kode Anda sehingga menutup koneksi finally.
  7. Nonaktifkan firewall dan / atau konfigurasikan firewall / proxy untuk mengizinkan / meneruskan port.

Lihat juga:

BalusC
sumber
4
MAMP / MAMP Pro menetapkan MAMP_skip-networking_MAMP secara default. Anda harus menonaktifkan baris ini di my.cfn Anda
Jurik
6
Tidak dalam kasus ini, tetapi Kegagalan Tautan Komunikasi juga terjadi ketika Anda menggunakan koneksi Pool dan koneksi ditutup karena ketidakaktifan yang berkepanjangan. Hanya dalam kasus itu, dikatakan "Paket terakhir diterima beberapa" X "detik yang lalu"
nikel
@nikel Tidakkah seharusnya utas di kumpulan koneksi tetap aktif dengan meluncurkan kueri validasi "pilih 1"? Mengapa mereka ditutup oleh ketidakaktifan yang berkepanjangan ketika kita telah menetapkan penggusur untuk berjalan pada interval waktu yang lebih pendek daripada batas waktu server mysql?
Farhad
Ya, kueri validasi akan memperbaikinya. Maksud saya adalah tentang kasus ketika tidak diatur & koneksi di kolam renang habis karena tidak aktif
nikel
Terkadang port hilang dari koneksi string & driver akan mencoba untuk terhubung ke port default mysql 3306 & gagal jika mysql tidak berjalan di port ini. Itu masalah saya jadi saya pikir saya harus menyebutkan kalau-kalau ada orang lain yang akan berguna.
Abdul Mannan
10

Saya menangkap pengecualian ini ketika Jawa kehabisan tumpukan. Jika saya mencoba memasukkan banyak item data dalam RAM - pertama saya menangkap " Kegagalan tautan komunikasi " dan selanjutnya " OutOfMemoryError ".

Saya login dan saya mengurangi konsumsi memori (menghapus 1/2 data) dan semuanya ok.

pengguna1694306
sumber
9

Dalam kasus saya, saya perlu melakukan penggantian Localhost ke alamat IP server database aktual

Dari pada

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

saya memerlukannya

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");
sureshAngamuthu
sumber
Pada Pembaruan Terbaru 4/5/18: Saat ini, saya menggunakan MySQL Workbench 6.3. Saya datang ke sini untuk memeriksa solusinya tetapi saya menemukannya sendiri, hanya saja server MySQL Anda tidak berjalan atau dihentikan. Saya restart server saya itu bekerja seperti pesona.
Abhishek Ekaanth
7
Inilah 'solusi terbaik' mengapa? Masalah apa yang dipecahkannya, dan bagaimana?
Marquis of Lorne
solusi ini tidak dapat menghasilkan kerangka data
Alan
8

com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionPengecualian ini terjadi jika koneksi database Anda idle untuk waktu yang lama.

Sambungan diam ini mengembalikan true pada connection.isClosed();tetapi jika kita mencoba menjalankan pernyataan maka itu akan memecat pengecualian ini jadi saya akan menyarankan untuk pergi dengan pooling database.

Yogesh Funde
sumber
2
Ini juga terjadi karena alasan lain seperti 'koneksi ditolak'.
Marquis of Lorne
6

Saya memiliki masalah yang sama selama berjam-jam. Saya menggunakan Server MAMP

Alih-alih menggunakan localhost: [Apache Port], gunakan port MySQL Anda.

Di bawah ini adalah MySQL Port default untuk server MAMP.

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

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
Abdul Rahim Mohamad
sumber
jika Anda memiliki kemacetan sebelum menginstal Mysql kemudian coba metode ini
DAVIS BENNY 15MIS0426
5

Saya mungkin menggonggong pohon yang salah di sini, tetapi pengecualian Anda tampaknya menunjukkan server MySQL Anda tidak tersedia.

Pengecualian di utas "utama" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kegagalan tautan komunikasiPaket terakhir yang berhasil dikirim ke server adalah 0 milidetik yang lalu. Pengemudi belum menerima paket dari server. di...

Apa yang terjadi jika Anda mencoba (dari terminal)

mysql -u username -p

Anda akan dimintai kata sandi yang terkait dengan nama pengguna. Setelah Anda memberikan kata sandi yang benar, apakah klien mysql terhubung?

Anda mungkin harus memulai MySQL dari Preferensi jika tidak. Anda juga dapat mengaturnya agar dijalankan saat startup.

Karl Walsh
sumber
1
Saya menggunakan MAMP untuk menjalankan server MySQL saya. Apakah itu akan menjadi masalah?
Josh K
Ketika saya terhubung (melalui Sequal Pro) ke saya, localhostsaya menggunakan nama pengguna / kata sandi yang benar dan berfungsi dengan baik.
Josh K
5

Dalam kasus saya, ternyata versi mysql-connector-javaterlalu lama.

Dalam demo saya, entah bagaimana saya gunakan mysql-connector-javaseperti ini:

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

Tetapi dalam lingkungan yang berkembang, saya menggunakan ini:

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

Dan versi MySQL saya adalah 5.1.48 (ya, sudah tua, hanya untuk meniru versi produk). Jadi saya menemukan kesalahan yang sama.

Karena alasannya ditemukan, solusinya juga ditemukan. Cocokkan versinya!

shellbye
sumber
4
Tidak sepertinya. Semua versi driver ini seharusnya kompatibel dengan versi mundur.
Marquis of Lorne
1
Masalah ini tampaknya diperbaiki di konektor mysql baru, lihat stackoverflow.com/questions/14559794/…
Nishi
Kasus yang sama untuk saya. Versi driver untuk MySQL 5 sedangkan versi server adalah 8. Jadi saya memperbarui versi jar dan masalahnya terpecahkan.
edenPan
4

Saya mendapat kesalahan yang sama karena saya mencoba menjalankan program saya tanpa memulai server mysql.

Setelah memulai server mysql, semuanya berjalan dengan baik.

rs2012
sumber
4

Jawaban sebelumnya sesuai. Tapi, saya juga ingin menunjukkan masalah yang lebih umum.

Saya menghadapi masalah serupa dan alasannya adalah pembatasan jaringan perusahaan saya.

Koneksi yang sama semakin sukses ketika saya berada di jaringan lain.

pengguna3251882
sumber
1
Pointer ini menyelesaikan masalah saya, dengan menyebutkan 'localhost' berfungsi ketika saya terhubung ke VPN, tetapi hal yang sama tidak berfungsi jika saya memutuskan sambungan dari VPN, namun saya memperbaiki ini dengan mengubah 'localhost' menjadi '127.0.0.1'
gannu_lee
4

Harap perbarui alamat IP Anda di file /etc/mysql/my.cnf

bind-address  = 0.0.0.0

Mulai ulang layanan mysql deamon dan mysql.

Sreedhar GS
sumber
1
Diedit untuk menggunakan alamat bind yang valid
OneCricketeer
3

Unduh MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' dari 'mysql-connector-java-5.1.11.zip') di Mysql .

Anda perlu memasukkan tabung driver selama kompilasi dan runtime di classpath Anda.

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" );
stacker
sumber
Tidak, memberi saya badai kesalahan tentang tidak menemukan apa pun. Apakah mungkin mengimpor ini tanpa file JAR?
Josh K
@Josh ini berfungsi, Anda benar-benar hanya perlu mengatur classpath Anda dengan benar. (Atau salin toples ke direktori% JAVA_HOME% \ jre \ lib \ ext Anda, tetapi ini dianggap praktik buruk)
stacker
3

Kesalahan ini juga dapat terjadi jika Java mencoba terhubung ke MySQL melalui SSL, tetapi ada yang salah. (Dalam kasus saya, saya mengkonfigurasi kolam koneksi Payara Server 5.193.1 ke MySQL.)

Beberapa orang menyarankan pengaturan useSSL=false. Namun, sejak versi Connector / J 8.0.13, pengaturan itu sudah usang. Berikut ini kutipan dari Properti Konfigurasi MySQL Connector / J 8.0 :

sslMode

Secara default, koneksi jaringan dienkripsi SSL; properti ini memungkinkan koneksi aman untuk dimatikan, atau tingkat keamanan yang berbeda untuk dipilih. Nilai-nilai berikut diperbolehkan: DISABLED- Membangun koneksi yang tidak terenkripsi; PREFERRED- (default) Membangun koneksi terenkripsi jika server mengaktifkannya, jika tidak kembali ke koneksi tidak terenkripsi; REQUIRED- Membangun koneksi yang aman jika server mengaktifkannya, gagal sebaliknya; VERIFY_CA- Menyukai REQUIREDtetapi juga memverifikasi sertifikat TLS server terhadap sertifikat Otoritas Sertifikat (CA) yang dikonfigurasi; VERIFY_IDENTITY- Suka VERIFY_CA, tetapi tambahan memverifikasi bahwa sertifikat server cocok dengan host yang koneksi mencoba.

Properti ini menggantikan sifat usang warisan useSSL, requireSSLdan verifyServerCertificate, yang masih diterima tetapi diterjemahkan ke dalam nilai untuk sslModejika sslModetidak secara eksplisit diatur: useSSL=falsediterjemahkan ke sslMode=DISABLED; {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}diterjemahkan ke sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}diterjemahkan ke sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}diterjemahkan ke sslMode=VERIFY_CA. Tidak ada pengaturan warisan yang setara untuk sslMode=VERIFY_IDENTITY. Perhatikan bahwa, untuk versi Server SEMUA, pengaturan default sslModeadalah PREFERRED, dan itu adalah setara dengan pengaturan warisan useSSL=true, requireSSL=falsedanverifyServerCertificate=false, yang berbeda dari pengaturan default untuk Connector / J 8.0.12 dan sebelumnya dalam beberapa situasi. Aplikasi yang terus menggunakan properti lawas dan mengandalkan pengaturan default lama harus ditinjau.

Properti lawas diabaikan jika sslModediatur secara eksplisit. Jika tidak ada sslModeatau useSSLdiatur secara eksplisit, pengaturan standar sslMode=PREFERREDberlaku.

Default :PREFERRED

Sejak versi : 8.0.13

Jadi, dalam kasus saya, hanya pengaturan sslMode=DISABLEDyang saya butuhkan untuk menyelesaikan masalah. Ini ada di mesin uji. Tetapi untuk produksi, solusi aman akan mengkonfigurasi klien Java dan server MySQL untuk menggunakan SSL.


Perhatikan bahwa dengan menonaktifkan SSL, Anda mungkin juga harus mengatur allowPublicKeyRetrieval=true. (Sekali lagi, bukan keputusan bijak dari sudut pandang keamanan). Informasi lebih lanjut disediakan di Opsi ConnectionString MySQL :

IzinkanPublicKeyRetrieval

Jika akun pengguna menggunakan sha256_passwordotentikasi, kata sandi harus dilindungi selama pengiriman; TLS adalah mekanisme yang lebih disukai untuk ini, tetapi jika tidak tersedia maka enkripsi kunci publik RSA akan digunakan. Untuk menentukan kunci publik RSA server, gunakan ServerRSAPublicKeyFilepengaturan string koneksi, atau atur AllowPublicKeyRetrieval=Trueagar klien dapat secara otomatis meminta kunci publik dari server. Catatan yang AllowPublicKeyRetrieval=Truedapat memungkinkan proxy jahat untuk melakukan serangan MITM untuk mendapatkan kata sandi plaintext, sehingga False secara default dan harus diaktifkan secara eksplisit.

MS Dousti
sumber
Utas yang relevan dari Payara Server GitHub .
MS Dousti
3

Masalah saya yang sama diselesaikan dengan langkah-langkah berikut:

  1. Pergi ke my.cnf

    vi /etc/mysql/my.cnf
  2. Ubah alamat ikatnya

    "bind-address = 0.0.0.0"
  3. Mulai ulang MySQL

    sudo /etc/init.d/mysql restart
Haimei
sumber
2

Jika Anda menggunakan WAMPatau XAMPserver untuk menginstal database mysql. Maka Anda harus secara eksplisit memulai mysql memutuskan hal lain yang akan ditampilkan com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failuresaat terhubung dengan database

xrcwrn
sumber
2

Saya memecahkan masalah ini dengan cara yang mudah, itu berhasil untuk saya. saya memiliki masalah seme "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kegagalan tautan komunikasi". Dalam file properti db.prop saya, saya punya ini: url: jdbc: mysql: // localhost: 90 / myDB, hanya menghapus port url, sehingga dengan cara ini url: jdbc: mysql: // localhost / myDB dan itu berhasil bagi saya .

Dario Castro
sumber
2

Thats terjadi pada saya ketika saya mengubah port mysql dari 3306 ke 3307 di file my.ini dan php.ini tetapi setelah mengubah port (3307-> 3306) kembali berfungsi dengan baik lagi.

MrPencil
sumber
2

Jika Anda mengubah port, Anda mendapatkan kesalahan seperti ini "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kegagalan tautan komunikasi" Silakan periksa nomor port Anda

Maheshkumar.V
sumber
1

Baru saja mengalami ini.

Harus membuatnya bekerja dengan: (ini dapat ditempatkan di intializer blok statis)

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

Juga dengan memperoleh koneksi melalui:

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

alih-alih menentukan parameter login

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

Salam.

mel3kings
sumber
2
Blok statis belum diperlukan sejak 2007, dan Anda dapat menentukan parameter login dengan cara apa pun.
Marquis of Lorne
1

Coba ubah localhostke 127.0.0.1.

Host lokal akan diatasi ::1. Dan MySQL tidak dapat terhubung melalui IPv6 secara default.

Dan inilah output dari telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

Dan tidak ada respons dari server MySQL.

Tentu saja, pastikan server MySQL Anda berjalan.

Haozhe Xie
sumber
Itu sebenarnya masalah dengan file / etc / hosts Anda, bukan Mysql
OneCricketeer
@ cricket_007 Secara default, localhost diselesaikan ke :: 1 alih-alih 127.0.0.1.
Haozhe Xie
1
Tentu, hanya jika ipv6 diaktifkan dan tergantung pada file host
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);

jika mysql versi 8 atau konektor yang diperbarui pengguna yang lebih tinggi

Ravinath
sumber
ini jawaban yang benar cukup tambahkan useSSL = false ke string koneksi saat menggunakan driver MySQL 8 atau lebih tinggi.
Mohannd
1

Untuk Panggilan Jarak Jauh ke Mysql

  1. Tambahkan pengguna jarak jauh ke Mysql dari untuk contoh IP = remoteIP:

    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. Izinkan akses jarak jauh ke Mysql (secara default semua panggilan eksternal tidak diizinkan):

    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. Untuk versi terbaru JDBC Driver, 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'
Yugerten
sumber
0

Saya memiliki masalah yang sama, dan inilah cara memperbaikinya:

  1. .Jsp saya memanggil atribut yang belum saya definisikan di servlet.
  2. Saya memiliki dua nama kolom yang saya lewati ke suatu objek melalui ResultSet (getString("columnName"))yang tidak cocok dengan nama-nama kolom dalam database saya.

Saya tidak yakin yang mana yang memperbaiki masalah, tetapi berhasil. Juga, pastikan Anda membuat kueri baru Statementdan ResultSetuntuk setiap tabel.

pengguna3427633
sumber
1
(1) tentu saja tidak menyebabkan masalah ini.
Marquis of Lorne
0

Ini bisa menjadi masalah guci sederhana. mungkin Anda menggunakan yang lama mysql-connector-java-XXX-bin.jaryang tidak didukung oleh versi mysql Anda saat ini. saya digunakan mysql-connector-java-5.1.18-bin.jarkarena saya menggunakan mysql 5.5dan masalah ini diselesaikan untuk saya.

Ankit Jain
sumber
1
Ya, ada kemungkinan ketidakcocokan toples.
Kiran Nunna
Semua versi driver ini seharusnya kompatibel.
Marquis of Lorne
0

Mungkin Anda tidak memulai Mysql dan Apache Server Anda. Setelah saya memulai server Apache dan Mysql dari XAMPP Control Panel, koneksi berhasil dibuat.

Semoga berhasil!

shivam gupta
sumber
0

Apa yang dipecahkan bagi saya adalah melakukan 2 hal: 1. membuat pengguna baru selain melakukan root dengan beberapa kata sandi menggunakan connad berikut:

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

2. komentar baris alamat IP di mysqld.conf

kemudian terhubung dengan nama pengguna dan kata sandi baru. itu harus bekerja.

Abdul Khalid
sumber
Anda harus mengulanginya untuk semua pengguna jarak jauh atau menambahkan wildcard alih-alih Localhost
OneCricketeer
0

Itu mencoba untuk terhubung ke versi MySQL yang lebih lama ('versi', '5.1.73'); ketika Anda menggunakan versi driver yang lebih baru Anda mendapatkan kesalahan yang memberitahu Anda untuk menggunakan "com.mysql.cj.jdbc. Pengemudi atau bahkan Anda tidak harus menentukan yang mana yang Anda gunakan:

Memuat kelas com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver '. Pengemudi secara otomatis terdaftar melalui SPI dan pemuatan manual dari kelas pengemudi umumnya tidak perlu.

Saya mengubah deklarasi untuk menggunakan versi 5.1.38 dari mysql-connector-java dan, dalam kode, saya menyimpan com.mysql.jdbc.Driver .

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

Semua dimulai ketika aku melihat Ankit Jain ini jawabannya

estellezg
sumber
0

Firewall saya memblokir post 3307 yang didengarkan MySQL saya. Jadi saya mengubah port dari 3307 ke 3306. Kemudian saya berhasil terhubung ke database.

Michal Šípek
sumber
0

Di MacBook saya, saya telah menyelesaikan kesalahan ini hanya ketika menginstal ulang versi baru eclipse EE dan menghapus server lokal seperti xamp mysql atau mamp tetapi hanya menggunakan salah satunya ...

m Piroli
sumber
0

Dalam kasus saya, saya harus membuat terowongan ssh ke basis data jauh dan semua pengaturan sudah benar dan pengujian koneksi dengan PhpStorm juga berhasil. Dan juga skema dimuat, tetapi bukan data. Sebaliknya saya mendapat:

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

Tidak ada saran di atas yang berfungsi. Untuk alasan apa pun saya mencoba menyelesaikan masalah hanya dengan me-restart PhpStorm dan voila berhasil!

Tek Nomad
sumber
0

Saya menerima beberapa kesalahan seperti:

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

Saya harus menambahkan:

  • Di AndroidManifest.xml sertakan <uses-permission android:name="android.permission.INTERNET"/>tepat setelah tag manifes pembuka.

  • Tambahkan driver JDBC ke dalam dependensi Gradle (atau Maven) Anda.

Daniel Segura
sumber