com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

来源:互联网 发布:win7本机mac地址查询 编辑:程序博客网 时间:2024/05/29 16:43

转自:https://stackoverflow.com/questions/2983248/com-mysql-jdbc-exceptions-jdbc4-communicationsexception-communications-link-fai


I'm working on getting my database to talk to my Java programs.

Can someone give me a quick and dirty sample program using the JDBC?

I'm getting a rather stupendous error:

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 moreCaused 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

Contents of the test file:

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?");    }}
shareimprove this question
 
1 
I was a stupid. MySQL server was not started :( It was successful after starting it. – user2589739 Dec 27 '16 at 8:11

21 Answers

activeoldestvotes
up vote152down voteaccepted

So, you have a

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
java.net.ConnectException: Connection refused

I'm quoting from this answer which also contains a step-by-step MySQL+JDBC tutorial:

If you get a SQLException: Connection refused or Connection timed out or a MySQL specific CommunicationsException: Communications link failure, then it means that the DB isn't reachable at all. This can have one or more of the following causes:

  1. IP address or hostname in JDBC URL is wrong.
  2. Hostname in JDBC URL is not recognized by local DNS server.
  3. Port number is missing or wrong in JDBC URL.
  4. DB server is down.
  5. DB server doesn't accept TCP/IP connections.
  6. DB server has run out of connections.
  7. Something in between Java and DB is blocking connections, e.g. a firewall or proxy. 

To solve the one or the other, follow the following advices:

  1. Verify and test them with ping.
  2. Refresh DNS or use IP address in JDBC URL instead.
  3. Verify it based on my.cnf of MySQL DB.
  4. Start the DB.
  5. Verify if mysqld is started without the --skip-networking option.
  6. Restart the DB and fix your code accordingly that it closes connections in finally.
  7. Disable firewall and/or configure firewall/proxy to allow/forward the port.

阅读全文
0 0