Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接到远程MySQL数据库时发生通信链路故障_Java_Mysql_Database_Jdbc - Fatal编程技术网

Java 连接到远程MySQL数据库时发生通信链路故障

Java 连接到远程MySQL数据库时发生通信链路故障,java,mysql,database,jdbc,Java,Mysql,Database,Jdbc,我试图让一个Java程序与一个MySQL服务器进行通信,该服务器由一个小桔子托管。他们提供给我的IP和端口是129.121.106.234:3306。用户已被授予对数据库的完全权限,在我的CPanel中,我通过添加访问主机“%”允许所有远程主机连接到MySQL数据库 我使用的是Eclipse,我下载了JDBC驱动程序并将其添加到构建路径中 据我所知,我尝试使用的用户对数据库拥有完全权限,MySQL服务器对来自任何IP的任何请求都是开放的。我还尝试了我的管理MySQL凭据,但出现了相同的错误,因此

我试图让一个Java程序与一个MySQL服务器进行通信,该服务器由一个小桔子托管。他们提供给我的IP和端口是129.121.106.234:3306。用户已被授予对数据库的完全权限,在我的CPanel中,我通过添加访问主机“%”允许所有远程主机连接到MySQL数据库

我使用的是Eclipse,我下载了JDBC驱动程序并将其添加到构建路径中

据我所知,我尝试使用的用户对数据库拥有完全权限,MySQL服务器对来自任何IP的任何请求都是开放的。我还尝试了我的管理MySQL凭据,但出现了相同的错误,因此我确信问题出在我的代码上。但我不是绝对确定,因为我自己不是MySQL服务器的宿主

我的代码:

package com.package.IPBounce;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Main {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    /*
     * Isaac the Support Ninja says: The MySQL port is 3306. The IP you use
     * is 129.121.106.234.
     */
    URL whatismyip;
    String IP;
    try {
        whatismyip = new URL("http://checkip.amazonaws.com");
        BufferedReader in = new BufferedReader(new InputStreamReader(
                whatismyip.openStream()));
        IP = in.readLine();
        System.out.println(IP);

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

                    //this is just testing code until I get the connection working
        String url = "jdbc:mysql://129.121.106.234:3306/db_name";
        String user = "user_name";
        String password = "small_password";
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection(url, user, password);//error is on this line
        st = con.createStatement();
        rs = st.executeQuery("SELECT VERSION()");

        if (rs.next()) {
            System.out.println(rs.getString(1));
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}
错误文本:

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(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1137)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:356)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2504)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2541)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2323)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.package.IPBounce.Main.main(Main.java:39)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:258)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:306)
... 15 more
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障
成功发送到服务器的最后一个数据包是0毫秒前的。驱动程序尚未从服务器收到任何数据包。
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
位于com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1137)
在com.mysql.jdbc.MysqlIO上(MysqlIO.java:356)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2504)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2541)
位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2323)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:832)
JDBC4Connection.(JDBC4Connection.java:46)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
位于com.package.IPBounce.Main.Main(Main.java:39)
原因:java.net.ConnectException:连接超时:连接
位于java.net.DualStackPlainSocketImpl.connect0(本机方法)
位于java.net.DualStackPlainSocketImpl.socketConnect(未知源)
位于java.net.AbstractPlainSocketImpl.doConnect(未知源)
位于java.net.AbstractPlainSocketImpl.connectToAddress(未知源)
位于java.net.AbstractPlainSocketImpl.connect(未知源)
位于java.net.PlainSocketImpl.connect(未知源)
位于java.net.socksocketimpl.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket。(未知源)
位于java.net.Socket。(未知源)
位于com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:258)
在com.mysql.jdbc.MysqlIO上(MysqlIO.java:306)
... 还有15个

编辑:我找到了解决方案。我的主机服务在防火墙上阻止MySQL请求。澄清了这一点,现在它工作得非常好。

这个问题已经在这里得到了回答:

请尝试接受答案中的步骤,看看您的问题是否得到解决


根据我的经验,当我的MySql配置文件只允许
localhost
访问时,我就遇到了这个问题。用ip地址替换localhost。

我认为唯一可能的问题是“newInstance()”调用。试着把它去掉,看看是否有效

发件人:

Class.forName("com.mysql.jdbc.Driver").newInstance();
致:


主机是否能够监控流量并验证您是否正在进行tcp/3306连接?我无法连接到该IP上的该端口,因此“对来自任何IP的任何请求开放”是不正确的,或者服务器本身当前无法访问。我应该提到的是,我已经尝试了所有这些步骤,但都不起作用。应该放进去的,对不起。
Class.forName("com.mysql.jdbc.Driver");