【问题标题】:Can not connect to MySQL server - Java [duplicate]无法连接到 MySQL 服务器 - Java [重复]
【发布时间】:2017-08-31 11:16:55
【问题描述】:

我无法连接到安装在 Ubuntu 16.04 服务器上的 MySQL 服务器,但出现以下错误:

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)

我可以使用 MySQL 客户端应用程序(如 Navicate 和 MySQL Workbench)连接到服务器而不会出现错误。

这是我的代码

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();
}

端口和用户名数据库名称和IP正确。

【问题讨论】:

    标签: java mysql linux


    【解决方案1】:

    您可以尝试将驱动程序类注册到DriverManager

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

    如果您仍然有问题,那么您可以尝试首先注销所有驱动程序,然后像这样再次添加驱动程序:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-30
      • 2015-08-01
      • 1970-01-01
      • 2015-05-10
      • 2012-11-03
      • 2016-01-10
      相关资源
      最近更新 更多