Android端Java连接MySQL抛出CommunicationsException连接失败问题咨询
问题根因定位
异常栈最底层报错为 java.net.SocketException: socket failed: EACCES (Permission denied),核心原因是你的安卓应用未申请网络访问权限,无法建立和MySQL服务器的socket连接。
修复步骤
1. 配置安卓网络权限
在项目的AndroidManifest.xml文件中添加网络权限声明,位置放在<manifest>标签内、<application>标签外:
<uses-permission android:name="android.permission.INTERNET" />
2. 补全JDBC连接参数
你当前使用的连接URL缺少高版本MySQL驱动必需的配置项,容易触发时区、SSL相关连接错误,建议修改为如下格式:
jdbc:mysql://xxxxxxx:3306/kospotco_DoIT?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
3. 服务端配置检查
如果配置权限后仍无法连接,依次核对如下服务端配置:
- 确认MySQL服务器的3306端口已开放,防火墙、安全组规则未拦截你客户端的IP访问
- 确认MySQL服务监听地址不是127.0.0.1,否则仅支持服务器本地访问,需修改为0.0.0.0或对外服务的网卡IP
- 确认你使用的数据库账号允许客户端IP访问,可执行如下SQL授权(替换对应账号密码):
GRANT ALL PRIVILEGES ON kospotco_DoIT.* TO 'user'@'%' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES;
补充提示
生产环境不建议安卓端直连MySQL,数据库账号密码硬编码在安装包内容易被反编译泄露,建议在服务端封装HTTP接口供APP调用,降低数据安全风险。
内容的提问来源于stack exchange,提问作者PureWare -Legends Of Gaming
相关产品推荐
相关产品推荐

