我有一个Java程序,它从MySQL获取其信息,当我使用localhost连接到它时,它工作正常,但是每当我将ipaddress放入其中时,它都将不起作用。 我的连接代码和异常如下。
package connection;
import java.net.InetAddress;
import java.sql.Connection;
import java.sql.DriverManager;
/**
*
* @author rpsal
*/
public class DBConnection {
public static Connection connect()//working on local host
{
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://"+getIpAddress()+"/ChatMaster";
conn = DriverManager.getConnection(url, "root", "");
} catch (Exception e) {
System.out.println("Exception in connect" + e);
}
return conn;
}
public static String getIpAddress() throws Exception {
InetAddress inetAddress = InetAddress.getLocalHost();
return inetAddress.getHostAddress();
}
}
当我使用String url = "jdbc:mysql:///ChatMaster";
时,效果很好。
我得到的异常如下。
Exception in connectjava.sql.SQLException: null, message from server: "Host 'Rp-Salh' is not allowed to connect to this MySQL server"
答案 0 :(得分:1)
该错误告诉您,ip Adress没有访问此数据库的权限,我认为这不是您的代码错误。
我不知道MySQL是否相同,但对于postgresql我 需要在数据库中定义以允许远程连接。
答案 1 :(得分:1)
我认为inetAddress.getHostAdress()
将返回主机名(如Rp-Salh)
所以我建议您使用这种方法
inetAddress.getLocalHost()
答案 2 :(得分:0)
从错误日志中可以看到。 InetAddress.getLocalHost();
未返回正确的IP地址。
请尝试通过提供硬编码的IP地址来进行连接(仅用于测试即可确定)。
您可以通过在CMD上键入ipconfig
在Windows中获取系统IP地址。
答案 3 :(得分:0)
您需要确保两件事。
检查MySQl端口3306
是否已打开。这是示例远程连接字符串
字符串url =“ jdbc:mysql://192.168.1.121:3306 / ChatMaster”;
检查数据库用户名和密码是否正确。
答案 4 :(得分:0)
更新mysql配置文件(可能在服务器文件目录etc / mysql / my.conf中),检查是否已将127.0.0.1(默认)作为主机地址进行配置并将其更改为IP。
答案 5 :(得分:0)
事实证明,@ Jan。 St向我指出了正确的方向,因为问题不在我的代码中,也不是在获取ipaddress问题,这只是默认情况下在mysql中禁用了远程root访问。我只是按照以下链接中的答案进行了操作。
How to allow remote connection to mysql
注意:如果单独的第一个答案不起作用,请确保您也遵循同一帖子中的第二个答案。