2

首先,这是一个自签名小程序,所以权限没问题。
其次,将小程序上传到 ftp 服务器并以 .html 文档打开。

我用来连接的代码本身是这样的:

try
{
    Class.forName("com.mysql.jdbc.Driver");
    long start = System.currentTimeMillis();
    Connection conn = DriverManager.getConnection("jdbc:mysql://the.hostname:3306/qnqdb", "username", "password");
    long end = System.currentTimeMillis();
    JOptionPane.showMessageDialog(rootPane, (end - start) + "ms.\n" + conn);
}
catch (SQLException ex)
{
    JOptionPane.showMessageDialog(rootPane, ex.getClass() + "\n" + ex.getMessage());
}

JOptionPane 显示它花了 127 秒(刚刚超过 4.5 分钟),无论我连接到什么数据库,第一次仍然需要永远。

如果我再次连接它,它只需要 200-2000 毫秒(看起来很正常)

为了测试它,我还打开了操作 Wireshark 并监听了 3306 端口。前 4 分钟什么也没发生。捕获图像
然后在接下来的 50 秒内,它记录了 28 个数据包。

奇怪的是,如果我在本地运行小程序时连接到数据库,第一次只需要约 500 毫秒,之后只需约 200 毫秒。

我在想的是:

  • 这不是数据库故障,因为它可以快速连接第二次到第 n 次。
  • 小程序在某种程度上有问题。也许由于某种原因类加载需要很长时间。

如果它有任何重要性,那么来自小程序的正常套接字连接在本地和 ftp 上都只需要 20-30 毫秒。

编辑
显然,在其他计算机上,它不需要很长时间。我试过的一个是大约 20 秒,而另一个应该只有 2-3 秒。
更新:确实似乎只有这台计算机需要很长时间。Java Console level 5的日志:http: //pastebin.com/2u2v7gZV

4

1 回答 1

1

再次查看 Java 控制台日志后,我注意到一件事。

我不断重复

network: Connecting http://shop.nordicbeads.com/Renes/mysql-connector-java-5.1.6-bin.jar with 
proxy=DIRECT network: Cache entry not found [url: http://shop.nordicbeads.com/Renes/mysql-connector-java-5.1.6-bin.jar, version: null]

一遍又一遍,但后来我注意到它使用的路径由于某种原因不是 ftp 服务器上库的路径。路径是 Renes/lib/library.jar,它没有在 lib 文件夹中使用查找。
我更改了库的位置,现在只需 3 秒即可连接。

奇怪的是,为什么我测试过的所有其他计算机都立即在 lib 文件夹中查找。为什么我的要花 4 多分钟才能看到那里?在 html 文档中,我什至在归档行中添加了库,前面有 lib/,但是有没有没有没有什么区别。

于 2012-07-22T15:09:22.220 回答