5

I am trying to connect mysql database using jdbc. Here is my Database connection Class:

public class Database { String userName = "myUserName"; String password = "myPass"; String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/database_Name?autoReconnect=true&useSSL=false"; public void connect() { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection(url,userName,password); Statement statement = conn.createStatement(); String queryString = "select * from users"; ResultSet rs = statement.executeQuery(queryString); while (rs.next()) { System.out.println(rs.getString(2)); } } catch (Exception e) { e.printStackTrace(); } } } 

For now, you can assume that I am calling that method like:

new Database().connect(); 

And I get this exception:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. 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.Util.getInstance(Util.java:408) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2163) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2088) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806) 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:410) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at Database.<init>(Database.java:17) at ServerTest.main(ServerTest.java:8) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 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: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:2251) at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2104) ... 19 more Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 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.PlainSocketImpl.connect(PlainSocketImpl.java:172) 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) ... 21 more 

*I added % to access database from remote.

*Java part working for localhost but when I try this remote database, it fails.

*The database and tables are created.(there is no problem about this.)

So where is the problem?

5
  • You MySql Server is up? You password and user are correcT? Commented Jan 13, 2017 at 15:09
  • Yes it's up, my website is also working with that server.I tried with 2 different username and password, didn't work. Commented Jan 13, 2017 at 15:11
  • I can't find an error in your code. Everything is ok. The only place can't be bad is the configuration of the MySql Server, try to run a querry via Command Line and see if is really working or accepting connections from other places Commented Jan 13, 2017 at 15:20
  • Can you telnet to the database server? Have you changed the server to bind on TCP instead of unix-sockets (howtogeek.com/howto/mysql/switch-mysql-to-listen-on-tcp) ? Commented Jan 13, 2017 at 15:21
  • The java.net.ConnectException: Connection refused: connect suggests your MySQL server is not running, not running on the specified port, or the port is not open on the ip address used, or a firewall is actively blocking the connection. Commented Jan 13, 2017 at 15:23

1 Answer 1

3

Java part working for localhost but when I try this remote database, it fails

This means, your MySql server is bound to localhost and is not visible outside. Please set bind-address property in your MySql conf file to the actual IP address of the host.

Eg: bind-address=192.168.1.26

By actual IP address, I mean whichever is visible to your client where java code is running. This could be intranet address or public IP. You might have to use some firewall if you are going to expose your public IP.

Sign up to request clarification or add additional context in comments.

4 Comments

I am not using vps.I bought hosting from a company.I suppose I don't have access to mysql conf.
In that case, there must be some UI based way to configure you MySql.
I don't think there is a way to configure MySql for hosting costumer.
when i fire wall of .it worked for me

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.