Android Studio连接Azure数据库部分网络失败问题排查与解决
问题分析与解决方法
可能原因及对应解决方案
1. 目标网络屏蔽MySQL默认端口(3306)
多数公共网络(公司内网、校园网、公共WiFi)会默认屏蔽3306这类数据库端口,防止外部直连带来的安全风险,这是部分网络无法连接的最常见原因。
- 解决方法:
改用Azure MySQL提供的SSL专用端口3308,修改JDBC URL:String url="jdbc:mysql://sda.mysql.database.azure.com:3308/helpgenic?useSSL=true&loginTimeout=30&requireSSL=true";
2. SSL配置不完整
虽然URL中添加了useSSL=true,但Azure MySQL要求强制SSL连接,部分网络下可能因证书未验证、中转节点拦截SSL握手导致失败。
- 解决方法:
下载Azure MySQL的官方SSL证书(DigiCertGlobalRootCA),放入项目res/raw目录,然后在连接前添加证书信任配置:
同时在JDBC URL中补充System.setProperty("javax.net.ssl.trustStore", getResources().openRawResource(R.raw.digicert_global_root_ca).toString()); System.setProperty("javax.net.ssl.trustStorePassword", "");requireSSL=true&verifyServerCertificate=true,强制完成SSL验证。
3. 网络DNS解析故障
部分网络的DNS服务器无法正确解析Azure数据库域名,导致连接请求无法定位到目标服务器。
- 解决方法:
直接使用Azure MySQL服务器的公网IP替换域名,修改JDBC URL:
或在测试设备上手动切换公共DNS(如8.8.8.8、1.1.1.1)验证是否解决问题。String url="jdbc:mysql://[你的服务器公网IP]:3306/helpgenic?useSSL=true&loginTimeout=30";
4. 连接超时设置过短
当前loginTimeout=30为30秒,若网络延迟较高,可能无法在超时时间内完成握手。
- 解决方法:延长超时时间,例如改为
loginTimeout=60。
5. MySQL驱动版本兼容问题
你使用的com.mysql.jdbc.Driver是旧版驱动,对Azure MySQL的新认证机制、SSL协议兼容性较差。
- 解决方法:
更新依赖为新版Connector/J:
同时修改代码中的驱动加载语句:implementation 'mysql:mysql-connector-java:8.0.33'Class.forName("com.mysql.cj.jdbc.Driver");
额外优化建议
- 不要在Android主线程中直接执行数据库连接操作,当前用
StrictMode.permitAll()只是临时绕过系统限制,会导致UI卡顿甚至ANR,建议改用Coroutine或AsyncTask实现异步连接。 - 可在Azure门户监控面板查看数据库的连接数指标,排查是否达到最大连接限制(此情况通常所有网络都会失败,但可作为兜底排查项)。
内容的提问来源于stack exchange,提问作者Huzaifa
相关产品推荐
相关产品推荐

