Android Studio通过XAMPP连接物理设备MySQL数据库失败问题排查
解决Android真机无法连接MySQL数据库的问题
我之前也碰到过一模一样的窘境——模拟器跑起来顺得很,真机一测就卡壳在数据库连接上。本质原因是模拟器和真机的网络环境完全不同,咱们一步步来排查修复:
1. 先确认网络环境是否一致
- 你的真机必须和运行MySQL的服务器处于同一个WiFi局域网里!模拟器默认共享电脑的网络,所以能直接访问
192.168.0.12,但真机如果用数据流量或者其他WiFi,肯定连不上这个局域网地址。 - 可以在真机上用浏览器或者Ping工具(比如Termux)试试能不能通
192.168.0.12的3306端口,先排除基础网络不通的问题。
2. 检查MySQL的远程访问配置
MySQL默认是禁止远程连接的,得改两个地方:
修改绑定地址
找到MySQL的配置文件(Windows是my.ini,Linux/macOS是my.cnf),把bind-address改成0.0.0.0(允许所有IP访问),然后重启MySQL服务。
授权root用户远程访问
在MySQL控制台执行以下命令,允许root从你的真机IP访问数据库:
GRANT ALL ON mydb.* TO 'root'@'你的真机IP' IDENTIFIED BY 'test'; FLUSH PRIVILEGES;
如果想简化测试,也可以允许所有IP访问(生产环境不建议):
GRANT ALL ON mydb.* TO 'root'@'%' IDENTIFIED BY 'test'; FLUSH PRIVILEGES;
3. 关闭服务器端的防火墙/安全软件
运行MySQL的电脑如果开了防火墙,一定要开放3306端口(MySQL默认端口),允许局域网内的设备访问。比如Windows防火墙要添加 inbound规则,放行3306端口。
4. 确保真机有网络权限
检查你的AndroidManifest.xml里有没有添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
模拟器可能默认绕过了权限检查,但真机必须明确声明这个权限才能访问网络。
5. 补全异常排查代码
你的现有代码没有异常捕获块,真机连接失败时根本看不到错误信息!建议加上catch块打印日志,方便定位问题:
try { String myUrl = "jdbc:mysql://192.168.0.12/mydb"; miastoItemList = new ArrayList<>(); Connection c = DriverManager.getConnection(myUrl, "root", "test"); Statement statement = c.createStatement(); String s = "SELECT * FROM city"; ResultSet rs = statement.executeQuery(s); // 处理查询结果... } catch (SQLException e) { e.printStackTrace(); Log.e("DB_CONN_ERROR", "数据库连接失败: " + e.getMessage()); }
按这个流程排查下来,基本就能解决真机连接的问题了!
内容的提问来源于stack exchange,提问作者Damian Grunwald
相关产品推荐
相关产品推荐

