我使用Room从我的本地Android sqlite数据库查询表。
我已经创建了一个抽象类Dao,并想知道我是否可以将列名作为参数传递给方法,如下所示:
@Query(value = "SELECT :columnName "
+ " from " + Constant.TABLE_NAME
)
public abstract Maybe<List<SomeEntity>> getResults(String columnName);
答案 0 :(得分:1)
不,抱歉,不支持。 Room仅支持SQLite的功能,而SQLite不支持列名,表名等参数。
答案 1 :(得分:1)
是的,@Query 不支持。
但是您可以使用 @RawQuery
来完成您的工作。
文档说
<块引用>RawQuery 方法只能用于读取查询。对于写查询, 使用 RoomDatabase.getOpenHelper().getWritableDatabase().
使用 RoomDatabase.getOpenHelper().getWritableDatabase()
进行写操作。
答案 2 :(得分:0)
Room在编译时验证SQL查询,因此它必须知道最终的列名。 但是,再加上一些代码,您也许可以解决此问题:
@Query(value = "SELECT " + Constant.COLUMN_A_NAME
+ " from " + Constant.TABLE_NAME
)
public abstract Maybe<List<SomeEntity>> getResultsFromA();
@Query(value = "SELECT " + Constant.COLUMN_B_NAME
+ " from " + Constant.TABLE_NAME
)
public abstract Maybe<List<SomeEntity>> getResultsFromB();
public Maybe<List<SomeEntity>> getResults(String columnName) {
switch (columnName) {
case Constant.COLUMN_A_NAME:
return getResultsFromA();
case Constant.COLUMN_B_NAME:
return getResultsFromB();
default:
throw "Invalid Column";
}
}
或使用枚举代替字符串。