如何使用Android Room获取特定列

时间:2018-08-29 13:01:47

标签: android 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>的循环中来运行它,但这似乎并不高效。

3 个答案:

答案 0 :(得分:1)

您的DAO:

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

您的型号:

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

在您查询SELECT * FROM item时*表示选择全部,在其中输入列名,您将获得该列中的对象列表

答案 1 :(得分:0)

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

例如,您可以编写以下项目类:

@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:

@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可以保存的所有其他数据类型(包括自定义类型?)(以及返回的特定列数据的列表)。希望这对以后的人有所帮助!

答案 2 :(得分:0)

要返回多列,请创建一个pojo class,可以将其设置为DAO function的返回类型

请注意,select查询应包含Pojo类变量名(可以通过 AS关键字完成)

详细答案在这里 https://stackoverflow.com/a/50802209/1029110

我就这个问题着手解决这个问题...但是没有找到答案。因此这可能对其他人有帮助。