Kotlin用JDBC连MySQL报Could not create connection错误如何解决
问题排查与解决方法
1. 权限与网络配置检查
- 先确认
AndroidManifest.xml中已添加网络权限:<uses-permission android:name="android.permission.INTERNET" /> - Android 9及以上系统默认禁止明文网络请求,需要在
<application>标签下添加属性允许明文流量:<application ... android:usesCleartextTraffic="true"> - 确认测试设备/模拟器与MySQL所在的192.167.1.108处于同一局域网,3308端口未被防火墙拦截,且MySQL账号
root允许非本地IP登录(需将root账号的host配置为%或对应设备IP)。
2. JDBC配置适配8.x驱动
你使用的是MySQL 8.0版本的驱动,原有配置存在兼容问题:
- 驱动类已更新,将
JDBC_DRIVER的值改为com.mysql.cj.jdbc.Driver - 8.x驱动要求URL补充时区、SSL等参数,修改DB_URL为:
val DB_URL = "jdbc:mysql://192.167.1.108:3308/prueba?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" - 确认数据库
root账号的密码确实为空,避免配置与实际不一致导致连接失败。
3. 线程规范修正
Android主线程禁止执行耗时网络操作,你当前直接在点击回调(主线程)中执行连接逻辑会被系统拦截,需放到子线程执行,示例修改:
buttonLogin.setOnClickListener{ // 用子线程执行连接操作 Thread { val connect = MySQLDatabaseConnector() connect.connect() }.start() }
如果项目引入了协程,更推荐用lifecycleScope切IO线程执行,避免内存泄漏。
补充说明
直接在Android端通过JDBC连接数据库存在极大安全风险,客户端存储的数据库账号密码很容易被反编译获取,你后续改用Web Service做中间层的方案是合理的。
内容的提问来源于stack exchange,提问作者scorpions78
相关产品推荐
相关产品推荐

