Android Room数据库查询不返回ID列

时间:2018-11-29 09:55:38

标签: android sqlite android-room fts4

问题是查询返回除“ id”以外的所有列

我使用fts4,并且在文档中显示:

  

已启用FTS的表始终使用INTEGER类型的主键,并带有   列名“ rowid”。如果您的FTS表支持的实体定义了   主键,它必须使用该类型和列名。

这是我的实体类:

@Fts4
@Entity(tableName = "projects")
public class Project {

@ColumnInfo(name = "rowid")
@PrimaryKey(autoGenerate = true)
private int id;
private String name;
@ColumnInfo(name = "start_date")
private String startDate;
@ColumnInfo(name = "end_date")
private String endDate;
private String description;
@ColumnInfo(name = "icon_path")
private String iconPath;
private long budget;


public Project(String name, String startDate, String endDate, String description, String iconPath, long budget) {
    this.name = name;
    this.startDate = startDate;
    this.endDate = endDate;
    this.description = description;
    this.iconPath = iconPath;
    this.budget = budget;
}


public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getStartDate() {
    return startDate;
}

public void setStartDate(String startDate) {
    this.startDate = startDate;
}

public String getEndDate() {
    return endDate;
}

public void setEndDate(String endDate) {
    this.endDate = endDate;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getIconPath() {
    return iconPath;
}

public void setIconPath(String iconPath) {
    this.iconPath = iconPath;
}

public long getBudget() {
    return budget;
}

public void setBudget(long budget) {
    this.budget = budget;
}

这是我的简单查询:

@Query("SELECT * FROM projects")
public LiveData<List<Project>> getAllProjectsI);

我收到警告:

  

app.aarsham.projeno.data.Model.Project有一些字段[rowid]   查询未返回。如果不应该阅读它们   从结果中,您可以使用@Ignore批注对其进行标记。您可以   通过使用以下方法注释该方法来消除此警告   @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)。传回的栏   查询:名称,开始日期,结束日期,描述,icon_path,预算。   app.aarsham.projeno.data.Model.Project中的字段:rowid,name,   开始日期,结束日期,说明,图标路径,预算。

和一个错误:

  

查询返回的列中没有字段[id]   即使已添加注释,app.aarsham.projeno.data.Model.Project   为非null或原始值。查询返回的列:   [名称,开始日期,结束日期,说明,图标路径,预算]

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

使用FTS时,即使使用rowid选择所有行,也必须在查询中显式包括行“ select *”。

基本上,查询应类似于@Query("SELECT *, `rowid ` FROM projects")