如何使用 Android Room 获取特定列

How to get specific column using Android Room

我正在尝试从我的数据库中获取 id 列,将其添加到 ArrayList 并向每个 ID 添加“\t0”,

我的数据库是使用 Room 创建的,我有很多列,其中之一是

@PrimaryKey(autoGenerate = true)
private int id;

我正在使用 ItemDAO 进行操作并且我有

功能
@Query("SELECT * FROM item")
List<Item> getItems();

写入ArrayList<Items>所有内容 我正在考虑 运行 它通过循环获取 id 并添加到 ArrayList<String> 但这似乎并不有效。

你的 DAO:

@Query("SELECT Id FROM item")
List<Integer> getAllIds();

您的模特:

@ColumnInfo(name = "Id")
@PrimaryKey(autoGenerate = true)
private int id;

在你的查询中 SELECT * FROM item * 表示 select 全部,把你的列名放在那里,你会得到该列的对象列表

示例:Select id 列中的所有项目 SELECT id FROM item

我尝试修改和测试@Valgaal 的解决方案。事实证明,Room 还可以 return 其他类型的值,而不仅仅是 id(或整数)。

例如,您可以这样写一个项目class:

@Entity(tableName = Item.TABLE_NAME)
public class Item {
    public static final String TABLE_NAME = "ItemsTable";
    public static final String COL_DESC = "Description";

    @PrimaryKey(autoGenerate = true)
    private int id;
    @ColumnInfo(name = COL_DESC)
    private String description;

    // getter & setter...
}

然后,你可以这样写道:

@Dao
public interface ItemDao {
    @Query("SELECT * FROM " + Item.TABLE_NAME)
    List<Item> getItems();

    @Query("SELECT " + Item.COL_DESC + " FROM " + Item.TABLE_NAME)
    List<String> getItemDescriptions();
}

它的功能应有尽有。 我想 Room 可以保存的所有其他数据类型(包括自定义类型?)都可以通过上面相同的逻辑查询(和 returned 特定列数据的列表)。希望这对以后的人有所帮助!

对于 return 多列,创建一个 pojo class 可以设置为 return 类型的 DAO function

注意 select 查询应该包含 Pojo class 变量名(可以通过 AS 关键字

详细答案在这里

我针对我的问题找到了这个问题...但没有找到答案。所以这可能对其他人有帮助。