1

我制作了一个访问数据库的 Java 程序。在开发阶段,我使用了一个本地数据库(XAMPP 和 MySQL),但是当我尝试访问 2 个不同的在线数据库(一个商业数据库和一个免费数据库)时,我在这两种情况下都收到了以下异常:

SQLException: Communications link failure
最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。

我用 PHP 访问它们没有任何问题。

这是我的代码:

private String user = "user1";
private String pass = "pass1";
private String dbClass = "com.mysql.jdbc.Driver";
private String dbDriver = "jdbc:mysql://db4free.net:3306/DBNAME";
private Connection conn = null;

public boolean connect() {
    boolean done = false;
    //load driver
    try {
        Class.forName(dbClass).newInstance();
        System.out.println("driver loaded"); // THIS IS BEING RETURNED
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
        System.err.println(ex);
    }
    // Connection
    try {
        conn = DriverManager.getConnection(dbDriver, user, pass);
        System.out.println("connected"); // THIS IS NOT BEING RETURNED
        done = true;
    } catch (SQLException ex) {
        System.out.println("SQLException: " + ex.getMessage());
    }
    return done;
}
4

5 回答 5

0

您的代码在 db4free 新创建的帐户上非常适合我:

检查以下事项:

应该显示您的公共 ip 或单个 %

您的用户名和密码是否正确,也将验证您的帐户是否已确认。

如果“DBNAME”正确,请登录db4free.net上的“phpMyAdmin-Login:”,DBNAME 将在“information_schema”上方的左侧

最后,您的本地防火墙不会阻止您:

telnet db4free.net 3306 (from a command line/prompt)

(如果您收到提示,您的防火墙会让您通过。)

于 2012-05-03T20:50:26.167 回答
0

MySQL 数据库不仅允许用户使用特定密码进行连接,还允许从 IP 范围或地址进行连接。

http://dev.mysql.com/doc/refman/5.1/en/create-user.html

CREATE USER 'jeffrey'@'127.0.0.1' IDENTIFIED BY 'mypass';

因此,在线数据库可能不允许该用户从您的 IP 地址连接或阻止。

于 2012-05-03T20:28:00.920 回答
0

您的代码中没有提到端口号。这是工作代码的示例。

  try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println(" Unable to load driver. ");
        }
        String url = "jdbc:mysql://DBSERVERNAME:3306/DATABASENAME";
        String username = "user";
        String password = "pass";
        try {
            this.conn = DriverManager.getConnection(url, username, password);
             System.out.println(" Connection Established. ");
        } catch (SQLException e) {
            System.out.println(" Error connecting to database:  "
                    + e);
        }

但是,此问题可能有多种原因。

  • 如果主机(运行此代码的机器)有权访问 MySQL 服务器,请检查您的 MySQL 服务器设置?
  • 验证 JDBC URL,检查端口号、IP 地址/主机名
  • 检查是否有任何东西(如防火墙、代理)阻止从主机到数据库服务器的连接
  • 尝试从主机 ping 数据库服务器

类似帖子:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure

于 2012-05-03T20:59:08.913 回答
0

我想可能是防火墙的问题,一般服务器可能在监听 127.0.0.1 的 ip 地址,所以你只能从本地系统访问我的 sql,在配置文件中将其更改为 0.0.0.0,然后它就会启动在职的。

于 2016-12-19T08:34:20.657 回答
-2
static private String user = "ajaykakkar";
static private String pass = "ajaykakkar7432";
static private String dbClass = "com.mysql.jdbc.Driver";

// 它的 - - - "jdbc:mysql://www.db4free.net:3306/yourdatabasename_ark";

static private String dbDriver = "jdbc:mysql://www.db4free.net:3306/yourdatabasename_ark";
static private Connection conn = null;

public static boolean connect() {
    boolean done = false;
    //load driver
    try {
        Class.forName(dbClass).newInstance();
        System.out.println("driver loaded"); // THIS IS BEING RETURNED
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
        System.err.println(ex);
    }
    // Connection
    try {
        conn = DriverManager.getConnection(dbDriver, user, pass);
        System.out.println("connected"); // THIS IS NOT BEING RETURNED
        done = true;
    } catch (SQLException ex) {
        System.out.println("SQLException: " + ex.getMessage());
    }
    return done;
}

public static void main(String args[]) {

    connect();

}

// 由@ajay.r.kakkar 完成

于 2014-06-11T07:59:50.503 回答