当我连接到我的MYSQL数据库(托管在具有托管而不是localhost的域上的phpmyadmin上)时,收到一个错误,我被拒绝完全访问服务器。到底是怎么回事?我对如何使用这种库方法不是很熟悉,并且感到困惑。
Connection connection;
try
{
connection =
DriverManager.getConnection("jdbc:mysql://WEBSITENAME.com/DATABASENAME0",
"DATABASEUSERNAME", "DATABASEPASSWORD");
Statement sql = connection.createStatement();
ResultSet myRs = sql.executeQuery("SELECT * FROM table");
while(myRs.next())
{
System.out.println(myRs.getString("column"));
}
} catch (SQLException e)
{
e.printStackTrace();
}
提供的错误如下:
java.sql.SQLException:用户'user'@'IP地址已在此处列出的访问被拒绝(使用密码:是) 在com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) 在com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) 在com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) 在com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835) 在com.mysql.cj.jdbc.ConnectionImpl。(ConnectionImpl.java:455) 在com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240) 在com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199) 在java.sql.DriverManager.getConnection(未知来源) 在java.sql.DriverManager.getConnection(未知来源) 在jDgmj8pWUnXVoHZk04z9.sqlConnect.updateCommand(sqlConnect.java:12) 在jDgmj8pWUnXVoHZk04z9.Driver.main(Driver.java:10)
答案 0 :(得分:0)
我对此有两个想法:
通常,您的MySQL拒绝来自其他主机的连接。您必须在配置文件中进行配置(请参见here)。如果您无法访问配置文件,则必须询问管理员。
此外,您应该检查端口3306(TCP连接的MySQL默认端口)是否打开。如果防火墙阻止了该端口,则将无法连接。在Windows中,您可以使用telnet进行检查(如果启用):
。
telnet WEBSITENAME.com 3306
没有错误消息(空白cmd)表示已建立连接。
答案 1 :(得分:0)
问题之一可能是服务器,请检查是否允许该用户从本地主机外部连接,或者检查是否允许该用户连接:user @ IPAddress
答案 2 :(得分:0)
托管服务的常见问题,例如当今的托管DB / DBaaS。许多托管服务提供商默认将其全部设置为DENY ALL,并且期望没有任何数据库连接被允许从匿名Internet IP进入。 (a)他们的平台之外或(b)他们的子网之外的任何东西。
如果其他推荐的测试不起作用(例如telnet),请询问数据库提供商是否维护白名单以及如何提供例外。通常,这是通过许多托管服务提供商的自助票务系统完成的。
或者您可以在同一托管提供商上共同托管Java应用程序吗?例如通过与数据库实例相同的子网上的基本VM /实例?