2

我已经看到关于这个主题的几个线程,但我仍然无法弄清楚出了什么问题。以下是代码:

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 MESSAGE:连接超时:连接

堆栈跟踪:

java.net.ConnectException:连接超时:在 java.net.PlainSocketImpl.doConnect(Unknown Source) 在 java.net.PlainSocketImpl.connectToAddress(Unknown Source) 在 java.net.PlainSocketImpl.socketConnect(Native Method) 处连接。 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.(Unknown Source) at java.net.Socket.(Unknown Source) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) at 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(Unknown Source) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 SQL.main(SQL.java:17)

** 结束嵌套异常 **

发送到服务器的最后一个数据包是 1 毫秒前。

这是我发现的几件事:

  1. IP/域或端口不正确
  2. IP/域或端口(即服务)已关闭
  3. IP/域的响应时间超过您的默认超时时间
  4. 您有防火墙阻止您使用的任何端口上的请求或响应
  5. 您有一个防火墙阻止对该特定主机的请求
  6. 您的互联网访问已关闭

a) 它是正确的。b)它没有关闭,因为我有一个正在使用该数据库的网站。c) 我该如何检查?我认为这不是问题,因为正如我所说,我在这个数据库上有一个正在运行的网站。d)现在的方式是因为我上面提到的同样的原因。e) 与 d 相同

那么我做错了什么?为什么 php 代码可以与 sql 一起使用,但 java 给了我错误?谢谢你。

4

2 回答 2

3

作为实验,尝试mysql1.oyo.co.il使用系统的 telnet 命令连接到端口 3306。或其他一些打开原始 TCP/IP 连接的 实用程序(例如nc或)。根据您的操作系统/发行版,您可能需要找到并安装合适的命令来帮助您进行故障排除。 观察会发生什么。netcat


重新诊断:

a) 它是正确的。

如果你这么说...

b)它没有关闭,因为我有一个正在使用该数据库的网站。

充其量你已经证明主机正在工作。80 端口上的 Web 服务和 3306 端口上的 MySQL 服务是不同的服务。(事实上​​,它可能mysql1.oyo.co.il正在使用巧妙的数据包路由技巧,以便将不同端口上的流量透明地路由到不同的主机或虚拟主机。)

c) 我该如何检查?

尝试更改/增加超时。

我认为这不是问题,因为正如我所说,我在这个数据库上有一个正在运行的网站。

我猜这不是超时问题......但正如我上面所说,你有一个网站的事实并没有说明 MySQL 服务是否正在运行。

d)现在的方式是因为我上面提到的同样的原因。

您只证明了您可以访问端口 80 ...见上文

e) 与 d 相同

您只证明了您可以访问端口 80 ...见上文


综上所述,合理的是:

  • 您有本地防火墙问题,
  • 该端口上的 MySQL 服务当前未运行,
  • 服务端的网络路由因该端口上的流量而中断,
  • MySQL 服务已永久关闭,或
  • 该服务的防火墙已配置为不接受来自随机(或特定)位置的网络连接,包括您的位置。

您看到的是超时而不是“连接被拒绝”这一事实表明,这更有可能是网络或防火墙问题,而不是 MySQL 服务端点本身的问题。

我的猜测是“他们”已经撤回了服务……而且你不应该再使用它了。(提供公共 MySQL 数据库服务让我觉得很奇怪……而且从安全和管理的角度来看也是有问题的。)

于 2012-12-05T09:52:14.493 回答
1

“连接超时”表示:

  • 故意忽略您的连接请求的服务器端防火墙
  • 网络拓扑问题,导致 IP 数据包无法通过
  • 服务器主机本身已关闭。

很可能是第一个。

请注意,与此处的其他答案相反,它并不表示服务器程序已关闭,或者客户端的本地防火墙问题。前者会导致“连接被拒绝”,而后者会给你一些类似于“权限被拒绝”的东西,具体取决于你的平台。

于 2012-12-05T21:33:53.343 回答