当前位置:首页 > 问答 > 正文

安卓开发|数据库连接 安卓实现MySQL数据库连接方法,安卓怎么连mysql数据库详解

安卓开发 | 数据库连接:手把手教你实现安卓与MySQL的通信

2025年8月最新动态
随着安卓14的普及和MySQL 8.3的发布,移动端与数据库的直接连接方案有了更多优化,谷歌近期在开发者文档中强调,虽然推荐使用Firebase等云端方案,但传统JDBC方式在特定场景下仍不可替代。


为什么安卓连MySQL这么麻烦?

你可能发现了,现在教程动不动就让你用PHP做中转,或者上Firebase,原因很简单:

  1. 安全问题:直接把MySQL地址、账号密码写进APP等于送黑客大礼包
  2. 性能问题:移动网络不稳定,直连容易超时
  3. 协议限制:新版MySQL默认加密协议,安卓需要额外配置

但如果你就是需要直连(比如内网应用),往下看具体方案。


准备工作

必备材料清单

  • 一台有公网IP的MySQL服务器(内网也行)
  • 安卓Studio 2025.1+
  • 手机安卓版本9.0以上(HTTP限制问题)

关键配置(MySQL端)

-- 创建远程访问账号
CREATE USER 'android_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON your_db.* TO 'android_user'@'%';
FLUSH PRIVILEGES;
-- 修改my.cnf
[mysqld]
bind-address = 0.0.0.0  -- 允许所有IP连接

安卓端代码实现

方法1:JDBC直连(适合内网环境)

  1. build.gradle添加依赖:

    implementation 'mysql:mysql-connector-java:8.0.30'
  2. 核心连接代码(记得放子线程!):

    安卓开发|数据库连接 安卓实现MySQL数据库连接方法,安卓怎么连mysql数据库详解

    new Thread(() -> {
     try {
         Class.forName("com.mysql.jdbc.Driver");
         Connection conn = DriverManager.getConnection(
             "jdbc:mysql://192.168.1.100:3306/your_db",
             "android_user",
             "StrongPassword123!"
         );
         Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery("SELECT * FROM users");
         while(rs.next()) {
             Log.d("DB_DATA", rs.getString("username"));
         }
         conn.close();
     } catch (Exception e) {
         e.printStackTrace();
     }
    }).start();

⚠️ 致命问题:这么写会被安全扫描工具秒杀!解决方案:

  • 改用SSL证书加密连接
  • 混淆关键字符串
  • 定期更换密码

方法2:HTTP接口中转(推荐)

这才是正经做法,用Spring Boot写个简单接口:

@RestController
public class UserController {
    @Autowired
    private UserRepository repo;
    @GetMapping("/api/users")
    public List<User> getUsers() {
        return repo.findAll(); // 这里用JPA操作MySQL
    }
}

安卓端用Retrofit请求:

interface ApiService {
    @GET("api/users")
    suspend fun getUsers(): List<User>
}
// 调用示例
val retrofit = Retrofit.Builder()
    .baseUrl("http://your_server_ip:8080/")
    .build()
val service = retrofit.create(ApiService::class.java)
val users = service.getUsers()

避坑指南

  1. 网络权限别忘了:

    安卓开发|数据库连接 安卓实现MySQL数据库连接方法,安卓怎么连mysql数据库详解

    <uses-permission android:name="android.permission.INTERNET" />
  2. 主线程限制:所有网络请求必须异步处理

  3. 超时设置

    OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .build();
  4. 数据加密:至少用HTTPS,别传明文密码


性能优化技巧

  • 连接池管理(HikariCP等)
  • 数据缓存(Room配合使用)
  • 批量操作代替频繁请求
  • 使用Protobuf替代JSON

除非是做智能家居这类局域网应用,否则真不建议安卓直连MySQL,现在云数据库价格也不贵,阿里云RDS最便宜套餐一个月不到一杯奶茶钱,还自带备份和安全防护,如果项目刚开始,直接用Firestore可能更省心。

安卓开发|数据库连接 安卓实现MySQL数据库连接方法,安卓怎么连mysql数据库详解

有具体问题欢迎讨论,特别是遇到SSLHandshakeException这类错误的,评论区见!

发表评论