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

安卓开发用数据库

安卓开发常用数据库类型

SQLite

  • 特点:轻量级嵌入式数据库,支持SQL语法,无需独立服务器,适合本地存储
  • 核心功能
    • 事务支持(ACID)
    • 索引优化查询
    • 支持复杂SQL语句
  • 适用场景:简单数据存储(如用户配置、离线缓存)

Room

  • 架构组件:基于SQLite的抽象层,提供编译时校验
  • 关键特性
    • 对象关系映射(ORM)
    • 协程支持(LiveData/Flow)
    • 类型安全查询
  • 优势:减少SQLite模板代码,防止运行时错误

Realm

  • 特性:面向对象的NoSQL数据库
  • 亮点
    • 跨平台支持(Android/iOS)
    • 自动更新UI的观察者模式
    • 高性能异步查询
  • 适用场景:需要频繁数据变更的实时应用

Firebase Firestore

  • 云数据库:基于Google Cloud的NoSQL解决方案
  • 核心能力
    • 实时数据同步
    • 离线数据持久化
    • 多平台数据共享
  • 优势:免去服务器搭建,适合快速开发

数据库选型对比表

维度 SQLite Room Realm Firestore
开发难度
性能 高(原生) 略低于SQLite 极高 中等(网络依赖)
实时性 需实现 自动观察 原生实时
跨平台 仅Android 仅Android Android/iOS 全平台
学习成本 中(需SQL) 低(封装SQL) 低(对象操作) 中(云服务)
最佳场景 简单本地存储 复杂本地存储 实时交互应用 多端同步应用

实战案例:用户登录模块设计

使用Room实现方案

步骤分解

  1. 定义实体类:

    @Entity(tableName = "users")
    public class User {
        @PrimaryKey
        @ColumnInfo(name = "user_id")
        private String id;
        private String username;
        private String password; // 实际应加密存储
    }
  2. 创建DAO接口:

    @Dao
    public interface UserDao {
        @Insert(onConflict = OnConflictStrategy.REPLACE)
        void insertUser(User... users);
        @Query("SELECT  FROM users WHERE username = :name")
        User login(String name);
    }
  3. 构建数据库:

    @Database(entities = {User.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase {
        public abstract UserDao userDao();
    }
  4. 调用示例:

    AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app_db").build();
    User user = new User("001","admin","123456");
    db.userDao().insertUser(user); // 插入数据

相关问题与解答

Q1:为什么推荐使用Room而不是直接操作SQLite?

A1

  • 编译时校验:Room在编译阶段验证SQL语句和字段映射,避免运行时崩溃
  • 代码简洁:通过DAO接口自动生成实现,减少50%以上模板代码
  • 现代化适配:内置支持LiveData和Flow,天然适配MVVM架构
  • 类型安全:使用Kotlin/Java对象替代裸SQL,降低注入风险

Q2:如何将现有SQLite数据库迁移到Room?

A2

  1. 保留旧数据库:在assets目录存放原有.db文件
  2. 创建Room实体类:按原表结构定义@Entity
  3. 迁移逻辑
    Room.migrationsEnabled(true); // 开启迁移支持
    AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app_db")
        .addMigrations(MIGRATION_1_2) // 添加迁移策略
        .createFromAssets("old_db.db") // 指定预置数据库
        .build();
  4. 版本管理:通过@Migration注解或自定义Migration类处理表结构变更

扩展知识要点

  1. 数据库加密:使用SQLCipher或Room的EncryptedType保护敏感数据
  2. 性能优化:对高频查询字段建立索引(@Index注解)
  3. 版本兼容:通过fallbackToDestructiveMigration()处理破坏性变更
  4. 测试技巧:使用in-memory模式进行单元测试,避免被墙真实数据
0