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

安卓开发自带的数据库

SQLite与Room详解


SQLite数据库

SQLite

  • 定位:Android系统内置的轻量级关系型数据库,基于SQL标准,无需额外依赖。
  • 特点
    • 嵌入式数据库,零配置,直接使用。
    • 支持事务、索引、完整SQL语法。
    • 适合存储结构化数据(如用户信息、配置等)。

使用方法

  • 创建/打开数据库:通过SQLiteOpenHelper管理数据库版本。
  • 操作API:使用SQLiteDatabase类执行增删改查。
  • 示例代码
    // 创建数据库帮助类
    public class MyDBHelper extends SQLiteOpenHelper {
        public MyDBHelper(Context context) {
            super(context, "mydb.db", null, 1);
        }
        @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) {
            // 处理数据库升级逻辑
        }
    }

SQLite的优缺点
| 优点 | 缺点 |
|————————|—————————|
| 系统内置,无需依赖 | 原始API操作繁琐,易出错 |
| 轻量级,性能较好 | 缺乏对象映射,需手写SQL |
| 支持事务与索引 | 无编译时校验,运行时报错 |


Room持久库

Room

  • 定位:Google推出的抽象层,基于SQLite,提供更高效的开发体验。
  • 核心组件
    • @Entity:定义表结构。
    • @Dao:定义数据操作接口。
    • @Database:标注数据库类,管理版本。
  • 优势
    • 编译时语法检查,减少崩溃风险。
    • 自动生成Dao实现类,支持LiveData实时监听。

使用步骤

  1. 添加依赖
    implementation "androidx.room:room-runtime:2.5.1"
    annotationProcessor "androidx.room:room-compiler:2.5.1"
  2. 定义实体
    @Entity(tableName = "user")
    public class User {
        @PrimaryKey(autoGenerate = true)
        public int id;
        public String name;
    }
  3. 创建Dao接口
    @Dao
    public interface UserDao {
        @Insert
        void insert(User user);
        @Query("SELECT  FROM user WHERE id = :id")
        User getUserById(int id);
    }
  4. 初始化数据库
    @Database(entities = {User.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase {
        public abstract UserDao userDao();
    }

Room的优缺点
| 优点 | 缺点 |
|————————|—————————|
| 编译时校验,安全性高 | 学习成本略高(需理解注解) |
| 支持LiveData实时更新 | 依赖Jetpack库,体积稍大 |
| 自动生成代码,减少冗余 | 复杂查询仍需原生SQL |


SQLite与Room对比

维度 SQLite Room
开发效率 低(需手动管理SQL) 高(注解生成代码)
安全性 低(无编译检查) 高(编译时校验)
功能扩展 基础功能 支持LiveData、RxJava等高级特性
适用场景 简单存储需求 复杂业务逻辑、多表关联场景

相关问题与解答

问题1:如何选择SQLite还是Room?

解答

  • 优先Room:若项目需要编译时校验、实时数据监听(如结合LiveData),或涉及复杂表关系。
  • 选择SQLite:仅存储简单数据且追求极致轻量化时(如临时缓存)。
  • 典型场景:用户登录信息存储推荐Room,本地缓存日志可考虑SQLite。

问题2:如何将SQLite数据库迁移到Room?

解答

  1. 数据结构迁移:将SQLite表结构转换为Room的@Entity类。
  2. 数据迁移:通过RoomDatabaseMigration接口处理版本升级逻辑。
  3. 替换API:将SQLiteDatabase的增删改查操作替换为Dao接口方法。
  4. 测试验证:确保迁移后数据完整性与功能一致,避免数据
0