Android Studio中Kotlin连接XAMPP MySQL数据库失败求助
解决Android模拟器连接本地XAMPP MySQL数据库的问题
问题根源
Android模拟器中的localhost/127.0.0.1指向模拟器自身,而非运行XAMPP的电脑,因此会出现连接被拒绝的错误。以下是具体解决步骤:
1. 替换连接地址为模拟器专用映射IP
将连接字符串中的localhost替换为:
- Android Studio自带模拟器:
10.0.2.2(该地址会映射到电脑的127.0.0.1) - Genymotion模拟器:
10.0.3.2
2. 配置MySQL允许外部访问
- 打开XAMPP控制面板,停止MySQL服务
- 找到MySQL的配置文件(Windows为
my.ini,Mac/Linux为my.cnf),修改bind-address为:bind-address = 0.0.0.0 - 重启MySQL服务
- 打开phpMyAdmin,执行以下SQL授权用户远程访问:
GRANT ALL PRIVILEGES ON student.* TO 'rootupdater'@'%' IDENTIFIED BY 'test1234'; FLUSH PRIVILEGES;
3. 修正代码并优化线程处理
直接在主线程执行数据库操作会触发ANR(应用无响应),改用Kotlin协程在IO线程执行:
MainActivity.kt
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 在IO线程执行数据库操作 lifecycleScope.launch(Dispatchers.IO) { Test.connection() } } }
Test.kt
import java.sql.DriverManager import java.sql.ResultSet import java.sql.SQLException object Test { fun connection(){ try { println("\nOK 1 ! \n") // 修正后的连接字符串,添加时区参数避免时区错误 val connect = DriverManager.getConnection( "jdbc:mysql://10.0.2.2:3306/student?user=rootupdater&password=test1234&serverTimezone=UTC" ) println("\n OK 2 ! \n") val state = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE) val reques = state.executeQuery("SELECT `id`, `Name`, `lastName`, `city` FROM `info` WHERE 1") if(reques.next()){ // 先判断是否存在数据 val str_Nom = reques.getString("Name") println(str_Nom) } // 关闭资源避免内存泄漏 reques.close() state.close() connect.close() } catch (e : SQLException){ println("\nNOT OK 2 ! \n") e.printStackTrace() println("\nNOT OK 1 ! \n") } } }
生产环境建议
不要直接在Android应用中使用JDBC连接数据库,正确的做法是搭建后端API(如Spring Boot、Node.js),APP通过HTTP请求与API交互,这样更安全且符合Android开发规范。
内容的提问来源于stack exchange,提问作者stevec13
相关产品推荐
相关产品推荐

