简体   繁体   中英

Connection refused: connect, can't connect database mysql

I can't connect remote database. When I connect my own database on localhost, it connects. What's wrong?

    Exception in thread "main" java.lang.IllegalStateException: Cannot connect the database!

    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.

Caused by: java.net.ConnectException: Connection refused: connect

Java Code:

String url = "jdbc:mysql://ipadress:3306/database?autoReconnect=true&useSSL=false";
        String username = "username";
        String password = "password";
        String query = "SELECT * FROM database";

        System.out.println("Connecting database...");
          try {
        // The newInstance() call is a work around for some
        // broken Java implementations

        Class.forName("com.mysql.jdbc.Driver").newInstance();
    } catch (Exception ex) {
        // handle the error
    }
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            System.out.println("Database connected!");
            //Uruchamiamy zapytanie do bazy danych
                        Statement stmt = connection.createStatement();
                        ResultSet rs = stmt.executeQuery(query);

                        while (rs.next()) {

                        }

                        connection.close();
        } catch (SQLException e) {
        throw new IllegalStateException("Cannot connect the database!", e);
        }
    }

I can login to database on PHPMyAdmin, I have no root account, it's my friend's database. I checked if port 3306 is open here: http://www.yougetsignal.com/tools/open-ports/ and it's closed. Where can I open it? In router settings in "port forwarding"? What private IP and type(TCP or UDP) should I set to open this port?

(Apologies if this answer is incomplete, but there is too much that does not fit in comments)

1) Don't ignore exceptions. This is bad : with // handle the error and nothing else in your catch block, in case of error there, your code will not report the error , and will move on with the execution (it should exit/break/return, depending on where that piece of code is).

2) I think checking "SHOW GLOBAL VARIABLES LIKE 'PORT';" is not enough. Ask your friend if the database daemon actually listens to port 3306 on a network interface that you can reach. MySQL can be configured with networking disabled ( skip-networking ), or enabled but only for local machine ( bind-address=127.0.0.1 or localhost -- it should be bind-address=0.0.0.0 or bind-address=hostname or public IP address...).

To check for that yourself, if you are on linux, try with nc or telnet (install nc if you don't have it): nc remotehost 3306 . If you get "connection refused", the error is definitely not in your java code, but in the server setup.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM