You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:45:45