SQLException:通信链接失败(Java / mysql)

时间:2012-02-14 04:25:23

标签: java mysql

有人可以向我解释为什么这条线有效:

conn = DriverManager.getConnection("jdbc:mysql://myWebsite.com:3306/schemaName?user=userX&password=passwordX");

但这一行没有:

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/schemaName?user=userX&password=passwordX");

尝试通过localhost(或127.0.0.1)访问时出现通信链路故障。但是,我可以通过PHP和MySQLQuery Browser以及MySQL Aministrator通过localhost访问数据库。

如果需要,这是我正在使用的整个方法:

public Database() throws Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();

try {
  conn = DriverManager.getConnection("jdbc:mysql://myWebsite.com:3306/schemaName?user=userX&password=passwordX");
  // Next line does not work.
  //    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/schemaName?user=userX&password=passwordX");
  } catch (SQLException ex) {
      displaySQLException(ex); // Seperate routine to display errors.
  }
}

感谢您的帮助, 理查德

4 个答案:

答案 0 :(得分:2)

你的mysqld可能是binding专门用于以太网接口,而不是所有接口(0.0.0.0)或localhost接口(127.0.0.1)。

在* nix平台上,您可以使用以下命令检查守护程序正在侦听的接口:

$ netstat -ln|grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN

答案 1 :(得分:0)

在第二段代码中:

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/schemaName?
                user=userX&password=passwordX");

它将尝试连接到localhost上的机器上的mysql(运行代码的 )。在您的情况下,您的计算机上或您运行代码的地方的mysql可能无法使用或停止,或者您传递的usename / password无效或者schemaname不存在。但是在myWebsite.com上它已经完成了。

您的代码没有任何问题。确保mySql已安装并正在运行,并且用户名/密码有效,在运行此代码localhost的计算机上存在一个提供了schemaname的模式。

答案 2 :(得分:0)

这可能由于多种原因而发生,例如

  1. MySQL服务器可能在目标计算机上停止
  2. MySQL可能配置为不接受远程连接
  3. 防火墙可能阻止端口3306上的远程连接

答案 3 :(得分:0)

就我而言,当我尝试从同一主机连接到在Ubuntu主机VM的容器内运行的mysql-server时遇到此错误。

示例: 如果我的虚拟机名称为abc.company.com,则以下jdbc URL 不起作用

jdbc:mysql://abc.company.com:3306/dbname

在类似xyz.company.com的其他计算机上,jdbc url可以正常工作,但在abc.company.com上则不能。

abc.company.com机器上,以下jdbc URL 可以正常工作

jdbc:mysql://localhost:3306/dbname

这导致我检查了/etc/hosts文件。

/etc/hosts中添加以下行可解决此问题:

127.0.1.1 abc.company.com abc

这似乎是一个操作系统错误,需要我们在某些Ubuntu版本中添加它们。 参考:https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_hostname_resolution

在尝试此操作之前,我尝试了所有其他解决方案,例如GRANT ALL..,更改了mysql.cnf中的bind-address行。在这种情况下,它们都没有帮助我。