数据库类型 | 特点 | 适用场景 |
---|---|---|
SQLite | 轻量级嵌入式数据库,支持SQL语法 | 离线数据存储、结构化数据管理 |
Room | 基于SQLite的ORM框架,提供抽象层 | 需要对象关系映射、复杂查询场景 |
Realm | 面向对象的数据库,支持多平台 | 高性能IO、跨平台数据同步 |
SQLite基础实现
SQLiteOpenHelper
onCreate()
方法初始化表结构getWritableDatabase()
获取操作实例ContentValues
构建插入数据Room持久化库特性
@Entity
标注数据模型@Dao
接口定义增删改查RoomDatabase
继承类数据迁移策略
// 版本号升级时调用migrate方法 db.migrateFromSqliteDatabase( oldDb, new Migration(1, 2) { @Override public void migrate(SupportSQLiteDatabase db) { db.execSQL("ALTER TABLE..."); // 修改表结构 } } )
AsyncTask
或协程SQLiteDatabase
实例,避免内存泄漏SQLiteDatabase.openDatabase()
配合自定义CursorFactory
实现加密READ_EXTERNAL_STORAGE
权限服务类型 | 优势 | 典型场景 |
---|---|---|
Firebase Realtime Database | 实时同步、离线支持 | 社交应用状态同步 |
Firestore | 文档型NoSQL、查询灵活 | 内容管理系统 |
AWS DynamoDB | 高可用、自动扩展 | 大规模数据存储 |
CREATE INDEX idx_name ON table(column)
insert INTO table VALUES (?),(?),...
Q1:Room数据库如何实现复杂关联查询?
A1:通过@Relation
注解定义实体间关系,结合Pojo
包装查询结果。
@Relation(parentColumn = "id", entityColumn = "user_id") List<Order> orders;
Q2:如何处理数据库版本升级导致的结构变更?
A2:在Migration
对象中编写SQL迁移脚本,步骤如下:
migrate()
方法中执行表结构修改语句 addMigrations()
注册迁移任务