Android Room中Category与Quote表关联查询实现方法咨询
Room实现Category与Quote关联筛选查询的简单说明
先搞懂关联基础
你的两个表已经有现成的关联关系了:Quote表的category_id字段,对应Category表的主键id,这就是实现查询的核心前提,不需要修改现有实体类。
两步完成查询实现
第一步:在DAO接口里定义查询方法
Room所有数据库操作都通过DAO(数据访问对象)接口实现。你只需要把自己写的SQL语句,用@Query注解标记在一个方法上。注意SQL里的:categoryId要和方法的参数名称一致,Room会自动把传入的参数值替换到SQL里。
简单说就是:把你写的那行SQL,原封不动(或者按需调整返回字段)放到@Query注解里,再写个带参数的方法就行。第二步:调用方法获取结果
在你的业务代码(比如Repository或ViewModel)里,调用这个DAO的方法,传入要筛选的分类ID,就能得到符合条件的查询结果。如果只需要Quote表的内容,可以把SQL改成SELECT quotes.* FROM quotes INNER JOIN categories ON quotes.category_id = categories.id WHERE categories.id = :categoryId,这样返回的就是纯Quote数据。
额外补充:关于@ForeignKey
如果想让Room帮你维护数据完整性(比如删除某个分类时自动删除关联的名言),可以在Quote实体里添加@ForeignKey注解关联Category实体,但这不是实现你当前查询的必要条件——就算不加,上面的查询方法依然可以正常工作。
内容的提问来源于stack exchange,提问作者John doe
相关产品推荐
相关产品推荐

