我有一个通过以下代码连接到数据库的JApplet:
String url = "jdbc:mysql://localhost:3306/moodlele_survey";
String user = "moodlele_garanti";
String password = "garanti";
try {
panel.add( new JLabel("before driver"));
Class.forName("com.mysql.jdbc.Driver");
panel.add( new JLabel("failed"));
Connection con = DriverManager.getConnection(url, user, password);
小程序已签名,因此它有权连接数据库。数据库用户被授予所有previlleges并且用户名,密码和数据库名称是正确的,因为我可以通过PHP使用相同的信息连接到数据库。我该如何解决?
打印的堆栈错误是: 用户“moodlele_garanti”@“localhost”的访问被拒绝(使用密码:是)
答案 0 :(得分:2)
您似乎并没有真正掌握您正在使用的技术或它们的工作方式。
在评论中说明:
我的网站的客户端计算机也是本地主机,用于在其中运行的代码通过ftp上传,如PHP中的逻辑:您编写localhost并上传到服务器,然后连接
PHP正在网络服务器上运行 。这也恰好与你的mysql服务器是同一个主机。所以,是localhost
在PHP中是正确的。您家中计算机上的Web浏览器通过TCP连接到Web服务器,PHP在Web服务器上执行,连接到同一主机上的mysql服务器,一切都很好。
Java小程序在您计算机上的浏览器中运行 。小程序从网站下载到您家中的计算机,并在该计算机上运行。您的代码在您的问题中编写的方式,然后尝试连接到您家中机器上的mysql服务器。 localhost
是您的计算机。
为了让该applet连接到托管公司的mysql服务器,它需要尝试连接那个主机。此外,端口需要在该服务器上打开/允许远程连接到mysql服务器,mysql需要监听外部(公共)IP地址上的连接,并且您需要为该用户授予权限能够从远程主机连接。
值得一提的是,一般来说这是一个非常糟糕的主意。很少将您的数据库暴露给世界一个好主意;授予访问权限的一个小错误会产生一个非常大的问题。还有许多其他安全问题。人们这样做吗?当然。仍然不是一个好主意。
通常,专为公共消费而设计的小程序将使用中间服务(例如Web API甚至RMI)来为您提供锁定机会的机会。