Android Studio中Kotlin连接本地MariaDB报通信链路失败如何解决
解决方案
1. 修正连接IP地址
你当前使用的127.0.0.1是Android设备/模拟器的本地回环地址,指向的是模拟器自身而非运行XAMPP的电脑主机:
- 若使用Android模拟器测试,替换IP为模拟器专属的主机映射地址
10.0.2.2 - 若使用真机测试,替换IP为电脑的局域网IP(可在电脑终端执行
ipconfig/ifconfig查看,一般为192.168.x.x格式)
同时需要补充JDBC连接参数适配8.0版本驱动,修改后的连接串示例:
jdbc:mysql://10.0.2.2:3306/invoices?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
2. 添加网络相关权限
在项目的AndroidManifest.xml文件中添加网络访问权限,位置在<manifest>标签下、<application>标签外:
<uses-permission android:name="android.permission.INTERNET" />
若使用的Android版本在9以上,需要在<application>标签添加属性,允许明文流量访问:
<application ... android:usesCleartextTraffic="true" ...>
3. 子线程执行数据库连接
Android系统禁止在主线程执行任何网络操作,你当前的连接逻辑直接在主线程运行会触发异常,必须放到子线程/协程中执行,同时建议显式加载JDBC驱动避免类找不到的问题,修改后的代码示例:
package com.example.invoices import android.util.Log import java.sql.SQLException import java.sql.DriverManager import java.sql.Connection import kotlin.concurrent.thread object DBConncection { @JvmStatic fun connection(){ // 开启子线程执行网络操作 thread { try{ // 显式加载驱动 Class.forName("com.mysql.cj.jdbc.Driver") val conn = DriverManager.getConnection( "jdbc:mysql://10.0.2.2:3306/invoices?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC", "root", "123" ) Log.d("Amado","Success") } catch (e: Exception){ Log.d("Amado",e.toString()) e.printStackTrace() } } } }
4. 开放数据库远程访问权限
XAMPP默认安装的MariaDB仅允许本地IP访问root用户,需要手动开权限:
- 打开XAMPP控制面板,点击Shell进入命令行
- 执行如下SQL命令:
GRANT ALL PRIVILEGES ON invoices.* TO 'root'@'%' IDENTIFIED BY '123'; FLUSH PRIVILEGES;
5. 连通性检查
如果使用真机测试,需要保证手机和电脑连接同一个WiFi,同时关闭电脑防火墙,或者在防火墙规则中开放3306端口的入站权限。
额外提示:直连JDBC的方式仅适合本地测试使用,生产环境不推荐,存在端口暴露、数据泄露等安全风险,正规实现需要搭建后端接口层,Android端通过接口请求操作数据库。
内容的提问来源于stack exchange,提问作者Amado
相关产品推荐
相关产品推荐

