上一篇
安卓开发存储数据库开发
- 行业动态
- 2025-04-22
- 3327
安卓本地存储方式
SharedPreferences
- 特点:基于XML的轻量级键值对存储,适合保存简单配置信息
- 适用场景:用户偏好设置、登录状态记录等
- 操作示例:
// 写入数据 SharedPreferences prefs = getSharedPreferences("config", MODE_PRIVATE); prefs.edit().putString("username", "admin").apply();
// 读取数据
String user = prefs.getString(“username”, “default”);
# 2. 文件存储
| 存储位置 | 特点 | 适用场景 |
|----------------|------------------------------|------------------------|
| 内部存储 | 无需申请权限,应用卸载时删除 | 配置文件、缓存数据 |
| 外部存储 | 需申请MANAGE_EXTERNAL_STORAGE权限 | 媒体文件、共享文档 |
| Cache目录 | 系统自动清理 | 临时缓存文件 |
# 3. SQLite数据库
核心组件:
`SQLiteOpenHelper`:数据库创建与升级
`ContentValues`:参数安全化的数据容器
`Cursor`:结果集游标
版本管理:
```java
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 执行数据库迁移操作
db.execSQL("ALTER TABLE user ADD COLUMN age INTEGER");
}
Room持久化库开发
核心组件
组件类型 | 作用 | 注解示例 |
---|---|---|
Entity | 定义数据表结构 | @Entity(tableName = "users") |
DAO | 数据访问接口 | @Dao |
Database | 数据库配置 | @Database(entities = {User.class}) |
典型用法
// 实体类定义 @Entity public class User { @PrimaryKey(autoGenerate = true) public int id; @ColumnInfo(name = "user_name") public String name; } // DAO接口 @Dao public interface UserDao { @Insert(onConflict = OnConflictStrategy.REPLACE) long insertUser(User... users); @Query("SELECT FROM user WHERE id = :userId") User getUserById(int userId); }
数据库操作优化
异步处理方案
方案 | 特点 | 适用场景 |
---|---|---|
AsyncTask | 简单异步任务(已废弃) | 小规模数据库操作 |
LiveData | 可观察的数据容器 | 实时数据更新 |
WorkManager | 可靠的后台任务调度 | 定期同步任务 |
Coroutines | 协程并发框架 | 复杂异步流程控制 |
索引优化
CREATE INDEX index_user_name ON user(name); -创建索引
事务管理
@Transaction public void updateUser(User user) { userDao.update(user); logDao.insert(new Log(user.id, "update")); }
常见问题与解决方案
数据库加密
- 实现方案:
- SQLCipher集成:替换默认SQLite实现
- Room配合EncryptedFile实现字段级加密
- 注意事项:密钥管理需符合安全规范
数据库迁移策略
- 版本控制:通过
onUpgrade()
实现渐进式迁移 - 数据备份:使用
BackupAgent
或第三方库(如MMKV) - 兼容性处理:保持至少3个历史版本支持
【相关问题与解答】
Q1:如何选择合适的存储方式?
A:根据数据特性选择:
- 简单键值对 → SharedPreferences
- 结构化数据 → SQLite/Room
- 二进制文件 → 文件存储
- 复杂关系数据 → 网络数据库(配合ContentProvider)
Q2:Room相比直接使用SQLite有哪些优势?
A:核心优势对比表:
| 特性 | Room | 原生SQLite |
|———————|———————–|———————|
| 编译时验证 | ️ | |
| 抽象层保护 | ️ | |
| LiveData支持 | ️ | |
| 类型安全 | ️ | |