尝试使用动态条件从Android Room持久性库中获取平均值

尝试使用动态条件从Android Room持久性库中获取平均值,android,android-room,Android,Android Room,我试图获得平均值,如果使用Android Room持久性库的两种情况下,我的实体如下所示: public class FinishedTask { private static final String TASK_NAME_COLUMN = "taskName"; private static final String DEPARTMENT_NAME_COLUMN = "departmentName"; private static final String EMPLOY

我试图获得平均值,如果使用Android Room持久性库的两种情况下,我的实体如下所示:

public class FinishedTask {
    private static final String TASK_NAME_COLUMN = "taskName";
    private static final String DEPARTMENT_NAME_COLUMN = "departmentName";
    private static final String EMPLOYEE_NAME_COLUMN = "employeeName";
    private static final String TIME_UNTIL_DOME_NAME_COLUMN = "timeUntilDoneName";
    private static final String SAVED_DATE_NAME_COLUMN = "savedDateName";

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    private long id = 0;

    @ColumnInfo(name = "passedMilliseconds")
    private long passedMilliseconds = 0;

    @ColumnInfo(name = TASK_NAME_COLUMN)
    private String  taskName = TASK_NAME_COLUMN;

    @ColumnInfo(name = DEPARTMENT_NAME_COLUMN)
    private String departmentName = DEPARTMENT_NAME_COLUMN;

    @ColumnInfo(name = EMPLOYEE_NAME_COLUMN)
    private String employeeName = EMPLOYEE_NAME_COLUMN;

    @ColumnInfo(name = TIME_UNTIL_DOME_NAME_COLUMN)
    private long timeUntilDone = 0;


    @ColumnInfo(name = SAVED_DATE_NAME_COLUMN)
    private long savedDate = 0;

    public FinishedTask(){}
}
@Query("SELECT AVG(timeUntilDoneName) FROM finishedTasks WHERE :column1=:value1 AND :column2=:value2")
Single<Long> getAverageTime(String column1, String value1, String column2, String value2);
我的查询如下所示:

public class FinishedTask {
    private static final String TASK_NAME_COLUMN = "taskName";
    private static final String DEPARTMENT_NAME_COLUMN = "departmentName";
    private static final String EMPLOYEE_NAME_COLUMN = "employeeName";
    private static final String TIME_UNTIL_DOME_NAME_COLUMN = "timeUntilDoneName";
    private static final String SAVED_DATE_NAME_COLUMN = "savedDateName";

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    private long id = 0;

    @ColumnInfo(name = "passedMilliseconds")
    private long passedMilliseconds = 0;

    @ColumnInfo(name = TASK_NAME_COLUMN)
    private String  taskName = TASK_NAME_COLUMN;

    @ColumnInfo(name = DEPARTMENT_NAME_COLUMN)
    private String departmentName = DEPARTMENT_NAME_COLUMN;

    @ColumnInfo(name = EMPLOYEE_NAME_COLUMN)
    private String employeeName = EMPLOYEE_NAME_COLUMN;

    @ColumnInfo(name = TIME_UNTIL_DOME_NAME_COLUMN)
    private long timeUntilDone = 0;


    @ColumnInfo(name = SAVED_DATE_NAME_COLUMN)
    private long savedDate = 0;

    public FinishedTask(){}
}
@Query("SELECT AVG(timeUntilDoneName) FROM finishedTasks WHERE :column1=:value1 AND :column2=:value2")
Single<Long> getAverageTime(String column1, String value1, String column2, String value2);
我得到了一个错误:

查询返回空结果集:从finishedTasks中选择AVGtimeUntilDoneName,其中?=?那么

当我将查询更改为:

@Query("SELECT AVG(timeUntilDoneName) FROM finishedTasks WHERE taskName=:value1 AND :departmentName=:value2")
Single<Long> getAverageTime(String value1, String value2);

一切正常,如预期的那样。我做错了什么?

您只能在SQLite本身支持占位符,而SQLite不支持用占位符替换列名的情况下使用占位符。

上次我尝试使用room时,它不支持动态列名。我的查询做错了什么吗?:column1=:value1和:column2=:value2列不能是动态的