上一篇
安卓开发 mysql数据库
- 行业动态
- 2025-04-22
- 9
环境准备
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 |
注意事项
安全性
- 永远不要在客户端存储数据库密码
- 使用HTTPS加密通信
- 服务器端需对输入进行校验和转义
性能优化
- 分页查询:
LIMIT 0,10
- 建立索引:
ALTER TABLE users ADD INDEX(username)
- 使用缓存(如Redis)减少数据库压力
- 分页查询:
异步处理
- 使用
AsyncTask
或Coroutine
处理网络请求 - 避免在主线程执行数据库操作
- 使用
问题与解答
问题1:为什么推荐使用REST API而不是JDBC直连?
解答:
- 安全性:直接暴露数据库IP可能导致被攻击,REST API可隐藏真实数据库信息
- 灵活性:API层可处理业务逻辑(如数据校验、关联多表)
- 跨平台:同一API可被iOS/Web等多种客户端复用
- 维护性:修改数据库结构时只需调整API层,无需更新客户端SDK
问题2:如何处理大量并发请求导致的数据库压力?
解答:
- 读写分离:主库负责写操作,从库处理读操作
- 连接池:使用数据库连接池(如HikariCP)复用连接
- 限流策略:API层设置请求频率限制(如每秒1000次)
- 缓存机制:热点数据使用Redis缓存,减少数据库查询