有人可以向我解释为什么这条线有效:
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.
}
}
感谢您的帮助, 理查德
答案 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)
这可能由于多种原因而发生,例如
答案 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
行。在这种情况下,它们都没有帮助我。