数据库类型 | 特点 | 适用场景 |
---|---|---|
SQLite | 轻量级嵌入式数据库,支持SQL语法,无需额外服务器,数据存储在本地文件 | 简单本地数据存储(如用户设置、缓存) |
Room | 基于SQLite的抽象层,提供编译时校验,支持LiveData和RxJava等响应式编程 | 需要类型安全和复杂关系型数据的本地存储 |
Realm | 高性能对象数据库,支持跨平台,数据以对象形式存储,实时更新 | 高频读写操作(如日志、实时数据同步) |
Firebase Firestore | 云数据库,实时同步,支持离线缓存,无需自建服务器,按使用量计费 | 需要云端同步和多设备实时更新的应用(如社交) |
SQL Server/MySQL | 传统关系型数据库,需部署服务器,支持复杂查询和事务 | 企业级应用或需要远程服务器管理的场景 |
SQLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS table_name (id INTEGER PRIMARY KEY, name TEXT)")
insert("table_name", null, ContentValues)
query("table_name", null, "id=?", new String[]{"1"}, null, null, null)
delete("table_name", "id=?", new String[]{"1"})
update("table_name", ContentValues, "id=?", new String[]{"1"})
@Entity
定义表结构,@Dao
定义操作接口,避免运行时错误。LiveData
自动感知数据变化, @Query("SELECT FROM user WHERE id=:userId") LiveData<User> getUserById(int userId);
Migration
类处理数据库版本升级。realm.copyToRealm(new User("John", 25)); // 插入或更新
findAllAsync()
返回RealmResults<T>
,支持UI线程安全更新。Realm.addChangeListener()
实时监听数据变化。dbHelper.setVersion(2)
onUpgrade()
方法: @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("ALTER TABLE user ADD COLUMN age INTEGER"); // 示例 }
@Database
注解中启用迁移: @Database(entities = {User.class}, version = 2) public abstract class AppDatabase extends RoomDatabase { public static AppDatabase build() { return Room.databaseBuilder(context, AppDatabase.class, "app.db") .addMigrations(MIGRATION_1_2) // 添加迁移脚本 .build(); } }
Migration
类定义版本间转换逻辑。documentReference.set(data).addOnSuccessListener(...)
自动推送到云端。FirebaseFirestore.getInstance().setFirestoreSettings(settings)
后,本地缓存数据可在网络恢复后自动同步。@Index
注解中为高频查询字段创建索引。 @Entity(indices = {@Index(value = "last_login_time")}) public class User { ... }
PagingSource
实现懒加载,减少单次数据量。LiveData
或Flow
提前加载可能用到