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

安卓备忘录数据库开发实例

数据表设计

备忘录应用的核心功能是存储和管理备忘信息,通常需要设计以下数据表结构:

安卓备忘录数据库开发实例  第1张

字段名 数据类型 说明
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) }
}

关键业务流程说明

  1. 新增备忘录:通过insert方法保存数据,自动生成时间戳
  2. 编辑备忘录后调用update,自动更新修改时间
  3. 置顶功能:修改is_top字段后调用update
  4. 删除备忘录:直接调用deleteById
  5. 数据观察: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:两种解决方案:

  1. 添加user_id字段到备忘录表,建立用户-数据关联
  2. 使用Room的TypeConverter实现多用户数据分库存储,每个用户对应独立数据库文件
0