You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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目录,然后在连接前添加证书信任配置:
    System.setProperty("javax.net.ssl.trustStore", getResources().openRawResource(R.raw.digicert_global_root_ca).toString());
    System.setProperty("javax.net.ssl.trustStorePassword", "");
    
    同时在JDBC URL中补充requireSSL=true&verifyServerCertificate=true,强制完成SSL验证。

3. 网络DNS解析故障

部分网络的DNS服务器无法正确解析Azure数据库域名,导致连接请求无法定位到目标服务器。

  • 解决方法:
    直接使用Azure MySQL服务器的公网IP替换域名,修改JDBC URL:
    String url="jdbc:mysql://[你的服务器公网IP]:3306/helpgenic?useSSL=true&loginTimeout=30";
    
    或在测试设备上手动切换公共DNS(如8.8.8.8、1.1.1.1)验证是否解决问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:30:51