上一篇
安卓备忘录数据库开发实例
- 行业动态
- 2025-04-22
- 6
数据表设计
备忘录应用的核心功能是存储和管理备忘信息,通常需要设计以下数据表结构:
字段名 | 数据类型 | 说明 |
---|---|---|
id | INTEGER PRIMARY KEY AUTOINCREMENT | 主键,自增唯一标识 |
content | TEXT | |
create_time | LONG | 创建时间戳(毫秒) |
update_time | LONG | 最后修改时间戳(毫秒) |
priority | INTEGER | 优先级(0-5,默认3) |
is_top | INTEGER | 是否置顶(0/1) |
实体类定义(使用Room持久化库)
@Entity(tableName = "memo") data class Memo( @PrimaryKey(autoGenerate = true) val id: Int = 0, val title: String, val content: String, val create_time: Long, val update_time: Long, val priority: Int = 3, val is_top: Int = 0 )
DAO接口设计
@Dao interface MemoDao { // 插入新备忘录 @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(memo: Memo): Long // 更新备忘录 @Update suspend fun update(memo: Memo): Int // 根据ID删除备忘录 @Delete suspend fun deleteById(id: Int): Int // 查询所有备忘录(按置顶和时间排序) @Query("SELECT FROM memo ORDER BY is_top DESC, update_time DESC") fun getAllMemos(): LiveData<List<Memo>> // 根据ID查询单条记录 @Query("SELECT FROM memo WHERE id = :id") suspend fun getMemoById(id: Int): Memo? }
数据库配置类
@Database(entities = [Memo::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun memoDao(): MemoDao }
Repository层实现
class MemoRepository(private val dao: MemoDao) { val allMemos: LiveData<List<Memo>> = dao.getAllMemos() suspend fun insert(memo: Memo) { dao.insert(memo.copy(create_time = System.currentTimeMillis(), update_time = System.currentTimeMillis())) } suspend fun update(memo: Memo) { dao.update(memo.copy(update_time = System.currentTimeMillis())) } suspend fun delete(id: Int) { dao.deleteById(id) } }
ViewModel层实现
class MemoViewModel(application: Application) : AndroidViewModel(application) { private val repository: MemoRepository val allMemos: LiveData<List<Memo>> init { val dao = AppDatabase.getInstance(application).memoDao() repository = MemoRepository(dao) allMemos = repository.allMemos } fun insert(memo: Memo) = viewModelScope.launch { repository.insert(memo) } fun update(memo: Memo) = viewModelScope.launch { repository.update(memo) } fun delete(id: Int) = viewModelScope.launch { repository.delete(id) } }
关键业务流程说明
- 新增备忘录:通过
insert
方法保存数据,自动生成时间戳 - 编辑备忘录后调用
update
,自动更新修改时间 - 置顶功能:修改
is_top
字段后调用update
- 删除备忘录:直接调用
deleteById
- 数据观察:UI通过
LiveData
监听allMemos
数据变化
单元表格对比不同实现方式
特性 | Room持久化库 | SQLite原生实现 |
---|---|---|
编译时校验 | ||
自动生成CRUD | ||
LiveData支持 | ||
类型安全 | ||
迁移管理 | 内置版本控制 | 需手动处理 |
协程支持 | 天然支持 | 需自行封装 |
相关问题与解答
Q1:如何实现备忘录分类功能?
A1:可新增分类表category
,并添加category_id
字段到备忘录表:
CREATE TABLE category ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE, color INTEGER -分类颜色标识 );
在备忘录表中增加category_id
字段,建立表关联关系,DAO中需添加联合查询方法。
Q2:如何处理多用户场景下的备忘录隔离?
A2:两种解决方案:
- 添加
user_id
字段到备忘录表,建立用户-数据关联 - 使用Room的
TypeConverter
实现多用户数据分库存储,每个用户对应独立数据库文件