0

Trying to connect a database in remote place over the internet.

import java.sql.*;

public class JdbcOverInternet {

    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");

        Connection con = DriverManager.getConnection("jdbc:mysql://110.32.144.14:3306/mydb", "mysql", "mysql");
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("select * from USER");
        while(rs.next()) {
            System.out.println(rs.getString(1));
        }
        rs.close();
        st.close();
        con.close();

    }
}

I'm getting the below exception

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:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2192)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2225)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2024)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at JdbcOverInternet.main(JdbcOverInternet.java:8)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)

Not sure what really missing in this code. I want to have mysql server in remote place and client to connect from another location over internet via JDBC.

It is possible JDBC over internet? If yes, what would be corner cases that we need to take care in security perspective. How will be the performance when JDBC client connects remote mysql server? Remote connection is something only available with MySQL or other databases can also support?

Much appreciated your help.

Sriram M
  • 482
  • 3
  • 12
  • 1
    `Connection refused ` is very descriptive. Whatever you are connecting to is not accepting connections. Could be anything: wrong address, wrong port, database down, firewall. We cannot possibly help you with this one. My guess is that the remote server's firewall is preventing the connection. – Jim Garrison Jul 01 '17 at 15:21
  • 1
    can you try from a shell do run `telnet 110.32.144.14 3306` to see if you can connect to the database? This command should be run on the same machine where your java program is running. – P.J.Meisch Jul 01 '17 at 15:28
  • https://stackoverflow.com/questions/8815012/how-to-run-ping-command-and-get-ping-host-summary Specially the line "isReachable" will help you. Check the very basics first like ping – bichito Jul 01 '17 at 15:38
  • @P.J.Meisch, i tried, still no luck, getting same error connection refused. might be some firewall issue. Thanks. – Sriram M Jul 01 '17 at 18:15
  • can you also confirm is it possible? if yes, what will be edge cases in terms of performance and security – Sriram M Jul 01 '17 at 18:18

0 Answers0