0

I have problem with connecting to MySQL Server installed on Ubuntu 16.04 server but I got these Errors:

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:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:355)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2461)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822)
    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:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at schoolcontroller.tools.DataBase.mysql.DataAccess.connect(DataAccess.java:45)
    at schoolcontroller.tools.DataBase.mysql.DataAccess.main(DataAccess.java:40)

I can connect to the server using MySQL Client applications like Navicate and MySQL workbench with no error.

Here is my code

public DataAccess() throws ClassNotFoundException {
    Class.forName("com.mysql.jdbc.Driver");
}

public static void main(String[] args) throws SQLException, ClassNotFoundException {
    System.out.println("Connecting");
    new DataAccess().connect();
}

public void connect() throws SQLException {
    String connection = "jdbc:mysql://%s:%s/%s?useUnicode=true&characterEncoding=UTF-8";
    conn = DriverManager.getConnection(String.format(connection, "IPAddress", "3306", "DBname"), "user", "pass");
    System.out.println("Connected");
    st = conn.createStatement();
}

The port and the username the database name and and the IP is correct.

1 Answers1

0

You could try to register the driver class to the DriverManager

String driver = "com.mysql.jdbc.Driver"
Class driverClass = Class.forName(driver);
Driver driverObj = (Driver)driverClass.newInstance();
DriverManager.registerDriver(driverObj);

If you still have problems, then you could try to deregister all drivers in first place and then add the driver again like this:

String driver = "com.mysql.jdbc.Driver"

List<Driver> allDriver = new ArrayList<Driver>();
Enumeration drivers = DriverManager.getDrivers();

while (drivers.hasMoreElements())
    allDriver.add((Driver)drivers.nextElement());
for (Driver d : allDriver)
    DriverManager.deregisterDriver(d);

Class driverClass = Class.forName(driver);
Driver driverObj = (Driver)driverClass.newInstance();
DriverManager.registerDriver(driverObj);
Yannick
  • 813
  • 8
  • 17