如何在RoomDatabase中查询反向记录?按自动生成主键排序
按自动生成主键反向查询Room记录的解决方案
嗨,这事儿很容易搞定!你只需要在现有的DAO查询语句中添加排序规则,就能实现按自动生成的主键倒序获取记录了。
首先,先确认你的Todo实体类里的自动生成主键字段——一般大家会用id字段,并且注解成这样:
@Entity(tableName = Todo.TABLE_NAME) public class Todo { public static final String TABLE_NAME = "todo_table"; public static final String COL_Item = "item"; // 自动递增的主键字段,这里假设字段名为id @PrimaryKey(autoGenerate = true) private long id; // 你的item字段 private String item; // 对应的getter、setter方法... }
接下来,修改你的TodoDao接口中的查询语句,加上ORDER BY [主键字段名] DESC就可以了。如果你的主键字段是id,修改后的代码如下:
@Dao public interface TodoDao { // 修改后的查询,按主键倒序返回所有item @Query("SELECT " + Todo.COL_Item + " FROM " + Todo.TABLE_NAME + " ORDER BY id DESC") List<String> getAllItems(); }
如果你想保留原来的getAllItems方法,同时新增一个反向查询的方法,也可以这样写:
@Dao public interface TodoDao { // 原方法:正序返回 @Query("SELECT " + Todo.COL_Item + " FROM " + Todo.TABLE_NAME) List<String> getAllItems(); // 新增方法:按主键倒序返回 @Query("SELECT " + Todo.COL_Item + " FROM " + Todo.TABLE_NAME + " ORDER BY id DESC") List<String> getAllItemsReversed(); }
几个需要注意的点:
- 一定要确保
ORDER BY后面的字段名和你实体类中定义的主键字段完全一致——要是你的主键字段叫todoId,就改成ORDER BY todoId DESC DESC表示降序排序,也就是从最大的主键值(最新插入的记录)开始返回;如果是ASC就是正序,这刚好是你要的“反向记录”的逻辑
这样调整之后,查询出来的结果就会按照自动生成的主键从大到小排列,完全符合你的需求啦!
内容的提问来源于stack exchange,提问作者Seongchan Kim
相关产品推荐
相关产品推荐

