当前位置:首页 > 行业动态 > 正文

安卓开发 mysql数据库

环境准备

MySQL数据库配置

步骤
1 安装MySQL服务器(如XAMPP/WAMP或直接安装MySQL)
2 创建数据库和表
sql<br>CREATE DATABASE myapp;<br>USE myapp;<br>CREATE TABLE users (id INT PRIMARY KEY, username VARCHAR(50), password VARCHAR(50));<br>
3 配置用户权限(建议限制IP和权限)
sql<br>CREATE USER 'android_user'@'%' IDENTIFIED BY 'password';<br>GRANT SELECT,INSERT,UPDATE,DELETE ON myapp. TO 'android_user'@'%';<br>FLUSH PRIVILEGES;<br>

Android端配置

配置项 说明
添加网络权限 AndroidManifest.xml中添加:
xml<br><uses-permission android:name="android.permission.INTERNET" /><br>
添加MySQL依赖 如果使用JDBC直连(不推荐),需添加:
gradle<br>implementation 'mysql:mysql-connector-java:8.0.33'<br>

连接方式对比

方式 优点 缺点 适用场景
JDBC直连 简单直接,无需额外服务器 安全性差,IP暴露风险高,主线程阻塞 仅适用于内部测试
REST API中间层 安全隔离,可处理业务逻辑 需要额外开发接口层(如PHP/Node.js) 生产环境推荐

通过REST API操作数据库(推荐方案)

搭建PHP接口(示例)

// register.php
<?php
$host = 'localhost';
$db = 'myapp';
$user = 'android_user';
$pass = 'password';
$conn = new mysqli($host, $user, $pass, $db);
$_POST = json_decode(file_get_contents('php://input'), true);
$stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->bind_param("ss", $_POST['username'], $_POST['password']);
$stmt->execute();
echo json_encode(['status' => $stmt->affected_rows > 0 ? 'success' : 'fail']);
?>

Android端调用示例

// 使用OkHttp发送请求
val client = OkHttpClient()
val json = """{"username":"test","password":"123456"}"""
val request = Request.Builder()
    .url("http://yourserver.com/register.php")
    .post(json.toRequestBody("application/json".toMediaType()))
    .build()
client.newCall(request).enqueue(object : Callback {
    override fun onFailure(call: Call, e: IOException) { / 处理失败 / }
    override fun onResponse(call: Call, response: Response) { / 处理成功 / }
})

数据操作示例(CRUD)

操作 SQL语句 Android端实现
Create INSERT INTO users (username, password) VALUES ('john', '123') 通过POST请求提交JSON数据
Read SELECT FROM users WHERE id=1 通过GET请求携带参数id=1
Update UPDATE users SET password='456' WHERE id=1 通过PUT请求提交JSON数据
Delete DELETE FROM users WHERE id=1 通过DELETE请求携带参数id=1

注意事项

  1. 安全性

    • 永远不要在客户端存储数据库密码
    • 使用HTTPS加密通信
    • 服务器端需对输入进行校验和转义
  2. 性能优化

    • 分页查询:LIMIT 0,10
    • 建立索引:ALTER TABLE users ADD INDEX(username)
    • 使用缓存(如Redis)减少数据库压力
  3. 异步处理

    • 使用AsyncTaskCoroutine处理网络请求
    • 避免在主线程执行数据库操作

问题与解答

问题1:为什么推荐使用REST API而不是JDBC直连?

解答

  1. 安全性:直接暴露数据库IP可能导致被攻击,REST API可隐藏真实数据库信息
  2. 灵活性:API层可处理业务逻辑(如数据校验、关联多表)
  3. 跨平台:同一API可被iOS/Web等多种客户端复用
  4. 维护性:修改数据库结构时只需调整API层,无需更新客户端SDK

问题2:如何处理大量并发请求导致的数据库压力?

解答

  1. 读写分离:主库负责写操作,从库处理读操作
  2. 连接池:使用数据库连接池(如HikariCP)复用连接
  3. 限流策略:API层设置请求频率限制(如每秒1000次)
  4. 缓存机制:热点数据使用Redis缓存,减少数据库查询
0