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?");
}
}
Jawaban:
Jadi, Anda punya
Saya mengutip dari jawaban ini yang juga berisi tutorial langkah-demi-langkah MySQL + JDBC:
Lihat juga:
sumber
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.
sumber
Dalam kasus saya, saya perlu melakukan penggantian Localhost ke alamat IP server database aktual
Dari pada
saya memerlukannya
sumber
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
Pengecualian 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.sumber
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.
sumber
Saya mungkin menggonggong pohon yang salah di sini, tetapi pengecualian Anda tampaknya menunjukkan server MySQL Anda tidak tersedia.
Apa yang terjadi jika Anda mencoba (dari terminal)
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.
sumber
localhost
saya menggunakan nama pengguna / kata sandi yang benar dan berfungsi dengan baik.Dalam kasus saya, ternyata versi
mysql-connector-java
terlalu lama.Dalam demo saya, entah bagaimana saya gunakan
mysql-connector-java
seperti ini:Tetapi dalam lingkungan yang berkembang, saya menggunakan ini:
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!
sumber
Saya mendapat kesalahan yang sama karena saya mencoba menjalankan program saya tanpa memulai server mysql.
Setelah memulai server mysql, semuanya berjalan dengan baik.
sumber
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.
sumber
Harap perbarui alamat IP Anda di file /etc/mysql/my.cnf
Mulai ulang layanan mysql deamon dan mysql.
sumber
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.
sumber
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 / J8.0.13
, pengaturan itu sudah usang. Berikut ini kutipan dari Properti Konfigurasi MySQL Connector / J 8.0 :Jadi, dalam kasus saya, hanya pengaturan
sslMode=DISABLED
yang 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 :sumber
Masalah saya yang sama diselesaikan dengan langkah-langkah berikut:
Pergi ke
my.cnf
Ubah alamat ikatnya
Mulai ulang MySQL
sumber
Jika Anda menggunakan
WAMP
atauXAMP
server untuk menginstal database mysql. Maka Anda harus secara eksplisit memulai mysql memutuskan hal lain yang akan ditampilkancom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
saat terhubung dengan databasesumber
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 .
sumber
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.
sumber
Jika Anda mengubah port, Anda mendapatkan kesalahan seperti ini "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kegagalan tautan komunikasi" Silakan periksa nomor port Anda
sumber
Baru saja mengalami ini.
Harus membuatnya bekerja dengan: (ini dapat ditempatkan di intializer blok statis)
Juga dengan memperoleh koneksi melalui:
alih-alih menentukan parameter login
Salam.
sumber
Coba ubah
localhost
ke127.0.0.1
.Host lokal akan diatasi
::1
. Dan MySQL tidak dapat terhubung melalui IPv6 secara default.Dan inilah output dari
telnet localhost 3306
:Dan tidak ada respons dari server MySQL.
Tentu saja, pastikan server MySQL Anda berjalan.
sumber
jika mysql versi 8 atau konektor yang diperbarui pengguna yang lebih tinggi
sumber
Untuk Panggilan Jarak Jauh ke Mysql
Tambahkan pengguna jarak jauh ke Mysql dari untuk contoh IP = remoteIP:
Izinkan akses jarak jauh ke Mysql (secara default semua panggilan eksternal tidak diizinkan):
Untuk versi terbaru JDBC Driver, JDBC:
sumber
Saya memiliki masalah yang sama, dan inilah cara memperbaikinya:
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
Statement
danResultSet
untuk setiap tabel.sumber
Ini bisa menjadi masalah guci sederhana. mungkin Anda menggunakan yang lama
mysql-connector-java-XXX-bin.jar
yang tidak didukung oleh versi mysql Anda saat ini. saya digunakanmysql-connector-java-5.1.18-bin.jar
karena saya menggunakanmysql 5.5
dan masalah ini diselesaikan untuk saya.sumber
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!
sumber
Apa yang dipecahkan bagi saya adalah melakukan 2 hal: 1. membuat pengguna baru selain melakukan root dengan beberapa kata sandi menggunakan connad berikut:
2. komentar baris alamat IP di mysqld.conf
kemudian terhubung dengan nama pengguna dan kata sandi baru. itu harus bekerja.
sumber
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:
Saya mengubah deklarasi untuk menggunakan versi 5.1.38 dari mysql-connector-java dan, dalam kode, saya menyimpan com.mysql.jdbc.Driver .
Semua dimulai ketika aku melihat Ankit Jain ini jawabannya
sumber
Firewall saya memblokir post 3307 yang didengarkan MySQL saya. Jadi saya mengubah port dari 3307 ke 3306. Kemudian saya berhasil terhubung ke database.
sumber
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 ...
sumber
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:
Tidak ada saran di atas yang berfungsi. Untuk alasan apa pun saya mencoba menyelesaikan masalah hanya dengan me-restart PhpStorm dan voila berhasil!
sumber
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.
sumber