Android Studio通过JDBC连接AWS RDS时报08001无法创建数据库连接问题
报错原因
08001是JDBC连接数据库的典型网络不通错误,触发原因主要有以下几类:
- AWS RDS实例未开启公网访问权限,或安全组入站规则未放行你当前Android设备所在网络的公网IP的3306端口
- 连接URL配置错误:未将占位符
awsrds-endpoint替换为真实的RDS实例端点,或数据库名、账号密码参数填写错误 - Android端未申请网络权限,或数据库请求直接运行在主线程触发Android主线程网络IO拦截机制
- MySQL JDBC驱动版本与RDS的MySQL版本不兼容,或连接URL缺少必要的时区、SSL配置参数
- RDS实例处于非运行状态(重启、维护、故障中),或你当前使用的网络封禁了3306端口
排查与解决步骤
- 优先验证RDS服务端配置
- 登录AWS控制台确认RDS实例状态为可用,且「公开访问」选项已开启
- 检查RDS关联的安全组入站规则,添加3306端口的允许规则,测试阶段可临时放行
0.0.0.0/0,验证完成后需修改为你实际使用的公网IP段,避免安全风险 - 你可以先用本地电脑的Navicat、MySQL CLI等工具使用相同的连接参数尝试连接,先排除服务端配置问题,若本地也无法连接则优先调整RDS配置
- 修正Android端配置与代码
- 在
AndroidManifest.xml中添加网络权限:<uses-permission android:name="android.permission.INTERNET" /> - 你当前的数据库连接代码直接运行在主线程,Android系统禁止主线程执行耗时网络IO操作,必须将这部分逻辑移到子线程、协程或异步任务中执行
- 在
- 修正JDBC连接配置
- 确认连接字符串中的RDS端点、端口、数据库名、账号密码完全正确
- 若你使用的是8.x版本的MySQL CJ驱动,需要在连接URL后补充时区与SSL参数,示例:
jdbc:mysql://你的RDS端点:3306/supplychain?user=admin&password=admin123&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true - 驱动版本需和RDS的MySQL版本匹配:RDS为MySQL 5.x版本时,推荐使用
mysql-connector-java:5.1.49;RDS为MySQL 8.x版本时,推荐使用mysql-connector-java:8.0.28
- 网络侧排查
- 确认Android设备连接的网络没有封禁3306端口,可尝试切换手机蜂窝流量测试连接
内容的提问来源于stack exchange,提问作者Gab
相关产品推荐
相关产品推荐

