Android studio连接数据库出现E/mysql111: null, message from server: "Host '' is not allowed to connect to this MySQL server"
Android Studio 连接 MySQL 数据库 Host not allowed 错误解决方案
当遇到 Host is not allowed to connect to this MySQL server
错误时,通常是因为 MySQL 用户的权限设置不正确或不足。以下是详细的分析和解决方法:
1. 权限配置问题
此错误的核心原因是目标主机未被授权访问 MySQL 数据库服务器。可以通过调整 MySQL 用户的权限来解决问题。具体来说,在 MySQL 命令行工具中执行以下 SQL 语句可以授予特定 IP 或任意主机对该数据库的访问权[^4]:
GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
上述命令中的 '%'
表示允许任何远程主机连接到该数据库。如果仅希望某些特定 IP 访问,则可以用实际的客户端 IP 替代 %
。
2. 配置 URL 和参数
确保在 Java 应用程序中使用的 JDBC URL 正确无误,并指向真实的网络接口而非循环回路地址 (localhost/127.0.0.1)[^1]。例如:
String url = "jdbc:mysql://<真实IP>:3306/<database_name>?useSSL=false&serverTimezone=UTC";
这里的 <真实IP>
是运行 MySQL 的机器的真实外部 IP 地址而不是 localhost。
3. 使用正确的驱动类名与依赖项
确认项目引入了适合版本的 MySQL Connector/J JAR 文件以及对应的 Maven 依赖声明。对于较新的 MySQL 版本(如8.x系列),推荐使用如下配置[^2]:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version> <!-- 确认兼容性 -->
</dependency>
同时更新代码内的 Driver 类名为 com.mysql.cj.jdbc.Driver
.
4. 子线程处理网络请求
由于安卓主线程不允许长时间阻塞操作(比如等待数据库响应),因此所有的数据库交互逻辑都应该放在独立的工作线程里完成[^3]. 可采用 AsyncTask, HandlerThread 或者更现代的方式如 Kotlin Coroutines 实现异步任务管理.
示例代码片段展示如何安全地建立连接并查询数据
下面是一个简单的例子演示如何通过子线程发起 MySQL 查询请求:
new Thread(new Runnable() {
@Override
public void run() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String connectionUrl = "jdbc:mysql://<真实IP>:3306/testdb?useSSL=false&serverTimezone=UTC";
Connection conn = DriverManager.getConnection(connectionUrl , "<username>", "<password>");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users LIMIT 1;");
while(rs.next()){
System.out.println("User ID: "+rs.getInt(1));
}
rs.close();
stmt.close();
conn.close();
} catch(Exception e){
Log.e("ERROR",e.getMessage());
}
}
}).start();
以上代码展示了完整的流程:加载驱动器、获取链接对象、创建陈述实例、读取结果集最后关闭资源释放内存占用。
相关推荐


















