上一篇
安卓开发自带的数据库
- 行业动态
- 2025-04-22
- 5
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实时监听。
使用步骤
- 添加依赖:
implementation "androidx.room:room-runtime:2.5.1" annotationProcessor "androidx.room:room-compiler:2.5.1"
- 定义实体:
@Entity(tableName = "user") public class User { @PrimaryKey(autoGenerate = true) public int id; public String name; }
- 创建Dao接口:
@Dao public interface UserDao { @Insert void insert(User user); @Query("SELECT FROM user WHERE id = :id") User getUserById(int id); }
- 初始化数据库:
@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?
解答:
- 数据结构迁移:将SQLite表结构转换为Room的
@Entity
类。 - 数据迁移:通过
RoomDatabase
的Migration
接口处理版本升级逻辑。 - 替换API:将
SQLiteDatabase
的增删改查操作替换为Dao
接口方法。 - 测试验证:确保迁移后数据完整性与功能一致,避免数据