android - 尝试从具有动态条件的 Android Room Persistence Library 中获取平均值
问题描述
如果使用 Android Room Persistence Library 的两个条件,我试图获得平均值,我的实体如下所示:
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);
我得到了错误:
查询返回空结果集:SELECT AVG(timeUntilDoneName) FROM finishedTasks WHERE ?=? 和?=?
当我将查询更改为:
@Query("SELECT AVG(timeUntilDoneName) FROM finishedTasks WHERE taskName=:value1 AND :departmentName=:value2")
Single<Long> getAverageTime(String value1, String value2);
一切正常,如预期的那样。我究竟做错了什么?
解决方案
您只能在 SQLite 本身支持占位符的情况下使用占位符,并且 SQLite 不支持用占位符替换列名。
推荐阅读
- node.js - NodeJS 应用程序在本地工作时未响应 GAE 上的任何请求
- android - 更改树莓派 3 上串行端口的波特率
- asp.net - 为新添加的 .aspx 页面获取 404 错误
- html - Bootstrap 三列布局折叠
- javascript - 角度:使用 ngFor 为段落设置不同的颜色
- html - 如何用水平线画满
- html - 将 Bootstrap 4 导航栏与 wordpress 4.x 结合的问题
- django - django-admin.py' 未被识别为内部或外部命令
- java - 是否有任何数据结构是java,它具有python中列表的所有功能
- hyperledger-fabric - 如何在 Hyperledger Fabric 中描述智能合约的通用输入?