将Java Applet连接到MySQL DB - 通信链接失败

时间:2010-07-07 05:38:03

标签: java php mysql jdbc

我正在尝试将Java Applet连接到MySQL数据库。我知道它有效,因为我可以在localhost上连接到它,它可以很好地检索记录列表。但是,当我把它放在互联网上时,它不起作用。

这是我的小程序:http://mystikrpg.com/play

已签名,但我一直收到以下异常:

  

SQLException获取原因:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败

     

成功发送到服务器的最后一个数据包是0毫秒前。驱动程序未收到来自服务器的任何数据包。

这怎么可能发生,我该怎么做才能解决这个问题?

以下是applet源代码:http://sodan.pastebin.com/jWKTgBSU

2 个答案:

答案 0 :(得分:5)

首先,以下例外

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 
  Communications link failure

可能有以下原因:

  1. JDBC URL中的IP地址或主机名错误。
  2. 本地DNS服务器无法识别JDBC URL中的主机名。
  3. JDBC URL中缺少或错误端口号。
  4. 数据库服务器已关闭。
  5. 数据库服务器不接受TCP / IP连接。
  6. 数据库服务器已用完连接。
  7. Java和DB之间的某些东西阻止了连接,例如防火墙或代理。

  8. 此外,您是否实现 Java applet在客户端机器上实际运行?即webbrowser运行的机器。客户端基本上从Web服务器下载applet,然后在客户端(本地)机器上执行。 JDBC连接字符串jdbc:mysql://localhost:3306将尝试连接到与运行applet的机器运行的MySQL数据库。您无法合理地期望世界上的每个客户端都运行MySQL数据库,更不用说您的数据库/表。

    如果您只想访问服务器计算机上托管的MySQL服务器(运行Web服务器的地方),并且您希望让applet与之通信,那么您必须创建并运行 webservice < / em>在网络服务器上。既然你用[PHP]标记了这个问题,我猜你在服务器端使用PHP,在这种情况下,只需创建一个PHP脚本,根据请求参数或pathinfo执行相应的MySQL操作。返回MySQL结果,例如JSON或XML字符串。在Applet中,您可以使用Java SE内置java.net.URLConnection或更方便的Apache HttpComponents Client与Web服务器进行通信。 E.g。

    URLconnection connection = new URL(getCodeBase(), "script.php?action=getdetails&productid=1").openConnection();
    InputStream response = connection.getInputStream();
    // ...
    

    在Java中,您可以使用Google Gson使用JAXP处理任何XML响应来处理任何JSON响应。


    那说(和无关当前问题),您使用的JDBC驱动程序名称是已弃用 org.gjt.mm.mysql.Driver。我强烈建议使用十年前引入的正确驱动程序名称来替换旧的驱动程序名称:com.mysql.jdbc.Driver。此外,还不需要Class#newInstance()之后的Class#forName()来电。它是在旧驱动程序中解决 bug 。另请参阅this explanation

答案 1 :(得分:0)

当远程访问文件或数据库时,它们没有足够的权限来访问文件或数据库。这就是JVM通过沙盒使用安全性的方式......

这就是我对applet特权的了解......