我看过一些关于这个主题的帖子,但我仍然不知道出了什么问题。以下是代码:
import java.sql.*;
public class SQL
{
public static void main(String[] args)
{
Connection conn = null;
String url = "jdbc:mysql://mysql1.oyo.co.il:3306/";
String dbName = "sdarot2_winner";
String driver = "com.mysql.jdbc.Driver";
String userName = "";
String password = "";
String table = "LEADER_CAM_PRODUCTS";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url+dbName,userName,password);
System.out.println("Connected to the database");
conn.close();
System.out.println("Disconnected from database");
}catch (Exception e) {
System.out.println(e);
}
}
}
这是我得到的错误:
com.mysql.jdbc.CommunicationsException:由于底层>>异常导致通信链路失败:
** 开始嵌套异常 **
java.net.ConnectException
消息:连接超时:连接
堆栈跟踪:
java.net.ConnectException:连接超时:连接
在 java.net.PlainSocketImpl.socketConnect(本机方法)
在 java.net.PlainSocketImpl.doConnect(来源未知)
在 java.net.PlainSocketImpl.connectToAddress(来源未知)
在 java.net.PlainSocketImpl.connect(来源未知)
在 java.net.SocksSocketImpl.connect(来源未知)
在 java.net.Socket.connect(来源未知)
在 java.net.Socket.connect(来源未知)
在 java.net.Socket.(来源不明)
在 java.net.Socket.(来源不明)
在com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
在com.mysql.jdbc.MysqlIO。(MysqlIO.java:271)
在 com.mysql.jdbc.Connection.createNewIO(Connection.java:2744)
在 com.mysql.jdbc.Connection。(Connection.java:1553)
在com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
在 java.sql.DriverManager.getConnection(来源未知)
在 java.sql.DriverManager.getConnection(来源未知)
在 SQL.main(SQL.java:17)
** 结束嵌套异常 **
最后发送到服务器的数据包是在 1 毫秒前。
以下是我在周围发现的一些东西:
- I.P/域或端口不正确
- I.P/域或端口(即服务)已关闭
- I.P/域的响应时间比默认超时时间长
- 您的防火墙会阻止您使用的任何端口上的请求或响应
- 您的防火墙阻止了对该特定主机的请求
- 您的互联网访问已关闭
a) 这是正确的。
b)自从我有一个正在使用该数据库的网站以来,它就没有关闭。
c)我如何检查?我不认为这是问题,因为正如我所说,我在这个数据库上有一个正在运行的网站。
d)现在这样,因为与我上面提到的原因相同。
e) 与 d 相同
那么我做错了什么?为什么 php 代码可以与 sql 一起工作,但 java 却给我错误?
谢谢。
作为实验,尝试连接到端口 3306mysql1.oyo.co.il
使用系统的 telnet 命令。或者其他一些实用程序(例如nc
or netcat
)打开原始 TCP/IP 连接。根据您的操作系统/发行版,您可能需要找到并安装合适的命令来帮助您解决此问题。观察会发生什么。
重新诊断:
a) 这是正确的。
如果你这么说的话...
b)自从我有一个正在使用该数据库的网站以来,它就没有关闭。
最多你已经证明了主机正在工作。端口80上的Web服务和端口3306上的MySQL服务是不同的服务。 (事实上,有可能mysql1.oyo.co.il
正在执行巧妙的数据包路由技巧,以便不同端口上的流量透明地路由到不同的主机或虚拟主机。)
c) 我如何检查?
尝试更改/增加超时。
我不认为这是问题,因为正如我所说,我在这个数据库上有一个正在运行的网站。
我猜这不是超时问题...但正如我上面所说,您有一个网站这一事实并不能说明 MySQL 服务是否正在运行。
d)现在这样,因为与我上面提到的原因相同。
您仅证明可以访问端口 80 ...见上文
e) 与 d 相同
您仅证明可以访问端口 80 ...见上文
根据上述情况,可以认为:
- 您有本地防火墙问题,
- 该端口上的 MySQL 服务当前未运行,
- 服务端的网络路由因该端口上的流量而中断,
- MySQL 服务已永久关闭,或者
- 该服务的防火墙已配置为不接受来自随机(或特定)位置(包括您的位置)的网络连接。
事实上,您看到的是超时而不是“连接被拒绝”,这表明这更有可能是网络或防火墙问题,而不是 MySQL 服务端点本身的问题。
我的猜测是“他们”已经撤回了该服务......并且您不应该再使用它。 (在我看来,提供公共 MySQL 数据库服务是一件奇怪的事情……而且从安全和管理的角度来看也是有问题的。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)