我正在尝试将我的Java Applet连接到MySQL数据库.我知道它有效,因为我可以在localhost上连接到它,它可以很好地检索记录列表.但是,当我把它放在互联网上时,它不起作用.
这是我的小程序:http://mystikrpg.com/play
它已签名,但我一直收到以下异常:
SQLException获取原因:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
成功发送到服务器的最后一个数据包是0毫秒前.驱动程序未收到来自服务器的任何数据包.
怎么会发生这种情况,我该怎么做才能解决这个问题呢?
这是applet的源代码:http://sodan.pastebin.com/jWKTgBSU
首先,以下例外
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
可能有以下原因:
JDBC URL中的IP地址或主机名是错误的.
本地DNS服务器无法识别JDBC URL中的主机名.
JDBC URL中的端口号丢失或错误.
数据库服务器已关闭.
数据库服务器不接受TCP/IP连接.
数据库服务器已用完连接.
Java和DB之间的某些东西阻止了连接,例如防火墙或代理.
此外,您是否意识到 Java Applet在客户端计算机上物理运行?即webbrowser运行的机器.客户端基本上从Web服务器下载applet,然后在客户端(本地)机器上执行.JDBC连接字符串jdbc:mysql://localhost:3306
将尝试连接到运行applet的机器上运行的MySQL数据库.您无法合理地期望世界上的每个客户端都将运行MySQL数据库,更不用说使用您的数据库/表.
如果你想要的是访问在服务器机器(那里的Web服务器上运行)主办的MySQL服务器,你想让它的小程序进行通信,那么你真的要创建和运行web服务的网络服务器.既然您也标记了这个问题[PHP]
,我想您在服务器端使用PHP,在这种情况下,只需创建一个PHP脚本,根据请求参数或pathinfo执行相应的MySQL操作,并将MySQL结果作为例如JSON或XML字符串.在Applet中,您可以使用Java SE内置java.net.URLConnection
或更方便的Apache HttpComponents客户端与Web服务器进行通信.例如
URLconnection connection = new URL(getCodeBase(), "script.php?action=getdetails&productid=1").openConnection(); InputStream response = connection.getInputStream(); // ...
在Java中,您可以使用JAXP 使用Google Gson处理任何JSON响应任何XML响应.
也就是说(与当前问题无关),您使用的JDBC驱动程序名称已被弃用 org.gjt.mm.mysql.Driver
.我强烈建议使用十年前引入的正确的驱动程序名称来替换旧的驱动程序名称:com.mysql.jdbc.Driver
.此外,也不需要Class#newInstance()
呼叫之后Class#forName()
.它是解决旧驱动程序中的错误.另见这个解释.