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

安卓开发用的数据库

Android内置数据库:SQLite

SQLite是Android系统自带的关系型数据库,无需额外集成,直接通过SQLiteOpenHelper使用。

特点

  • 轻量级:占用资源少,适合本地存储。
  • ACID特性:支持原子性、一致性、隔离性、持久化。
  • SQL语法:需手动编写SQL语句操作数据。

适用场景

  • 简单数据存储(如用户配置、缓存)。
  • 需要事务支持的场景。

示例代码

SQLiteOpenHelper dbHelper = new SQLiteOpenHelper(context, "dbName", null, version) {
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级逻辑
    }
};
SQLiteDatabase db = dbHelper.getWritableDatabase();

Google官方推荐:Room持久化库

Room是基于SQLite的抽象层,提供编译时校验和流畅API,减少SQL错误。

特点

  • 对象映射:通过@Entity将Java类映射为数据库表。
  • 编译时检查:SQL语句错误在编译阶段暴露。
  • LiveData支持:可与LiveData结合实现数据观察。

适用场景

  • 复杂数据操作需要类型安全。
  • 需要与MVVM架构结合的项目。

核心组件
| 组件 | 作用 |
|——————–|——————————|
| @Entity | 定义数据库表结构 |
| @Dao | 定义数据操作接口 |
| @Query | 自定义SQL查询 |
| RoomDatabase | 数据库实例管理类 |

示例代码

@Entity(tableName = "user")
public class User {
    @PrimaryKey public int id;
    public String name;
}
@Dao
public interface UserDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(User user);
    @Query("SELECT  FROM user")
    LiveData<List<User>> getAllUsers();
}

高性能对象数据库:Realm

Realm是一个面向对象的数据库,支持跨平台,性能优于SQLite。

特点

  • 零拷贝:数据以对象形式直接操作,无需转换。
  • 多线程支持:自动处理线程间数据同步。
  • 实时更新:数据变更可立即通知UI。

适用场景

  • 频繁读写操作的高性能需求。
  • 需要实时数据同步的应用场景。

示例代码

Realm realm = Realm.getDefaultInstance();
realm.executeTransaction(r -> {
    User user = r.createObject(User.class, 1); // 自动创建主键为1的对象
    user.name = "John";
});

云数据库:Firebase Firestore

Firebase提供的NoSQL云数据库,适合需要实时同步和后端服务的应用。

特点

  • 离线支持:自动同步本地与云端数据。
  • 实时监听:支持数据变化监听(类似WebSocket)。
  • 全平台覆盖:不仅限于Android,支持Web/iOS。

适用场景

  • 需要快速搭建后端的服务。
  • 跨平台应用的数据存储。

示例代码

FirebaseFirestore db = FirebaseFirestore.getInstance();
Map<String, Object> user = new HashMap<>();
user.put("name", "Alice");
db.collection("users").add(user).addOnSuccessListener(documentReference -> {
    Log.d("Firestore", "Document added with ID: " + documentReference.getId());
});

数据库对比表格

特性 SQLite Room Realm Firestore
类型安全
性能 中等 接近SQLite 依赖网络
实时同步 局部实时 是(云端)
学习成本 高(SQL)
最佳场景 简单存储 复杂架构 高性能需求 跨平台云服务

相关问题与解答

问题1:如何根据项目需求选择数据库?

解答

  • 优先内置:若功能简单且对性能要求低,直接使用SQLite。
  • 追求效率:高频读写或复杂查询选Room(类型安全)或Realm(极致性能)。
  • 需要云端:选Firestore,尤其适合需要实时同步的社交/协作类应用。
  • 混合使用:本地用Room/Realm,云端用Firestore,通过同步机制结合。

问题2:Room与Realm能否共存?数据如何迁移?

解答

  • 共存场景:可以同时集成,Room适合结构化数据,Realm适合频繁变更的对象。
  • 迁移方法
    1. 从Room迁移到Realm:遍历Room数据,逐条写入Realm。
    2. 从Realm迁移到Room:导出Realm数据为JSON,再解析导入Room。
  • 注意:两者数据模型不同,需确保字段匹配,避免数据
0