我正在尝试使用SupportSQLiteQueryBuilder
创建以下查询:
SELECT * FROM tablename WHERE favorite=1 ORDER BY col1
我使用以下代码构建此查询:
public static SupportSQLiteQuery getSortedQuery(String sortByColname, boolean fav){
SupportSQLiteQueryBuilder builder=
SupportSQLiteQueryBuilder
.builder(DbUtils.Names.TABLE_NAME)
.columns(new String[]{Names.COL1,Names.COL2,Names.COL3,Names.COL4,Names.COL5,Names.COL_FAVORITE})
.orderBy(sortByColname) ;
if(fav){
builder.selection(Names.COL_FAVORITE,new String[]{"1"} );
}
SupportSQLiteQuery query= builder.create();
//Log.e("DB_UTILS", "getSortedQuery:query="+query.getSql());
return query;
}
但是在检查单元测试时,我发现以下是此方法生成的sql查询:
SELECT col1,col2,col3,col4,col5 favorite FROM tablename WHERE favorite ORDER BY col1
为什么争论没有被采纳到这个陈述中?为什么仅生成favourite
和favourite=1
?
是否可以在查询中生成*
?写所有的名字而不是*
会很痛苦
答案 0 :(得分:0)
说实话,我将为此使用原始查询,并使用基于fav
的不同SQL字符串。但是,如果您真的想使用SupportSQLiteQueryBuilder
...
关于第1项,通常在运行时评估位置参数,这是SupportSQLiteQueryBuilder
API所针对的。因此,您可以:
Names.COL_FAVORITE
替换为Names.COL_FAVORITE = ?
,然后它将在运行时使用您的new String[]{"1"}
Names.COL_FAVORITE
替换为Names.COL_FAVORITE = 1
,这将在运行时忽略您的new String[]{"1"}
关于项目2,将.columns(new String[]{Names.COL1,Names.COL2,Names.COL3,Names.COL4,Names.COL5,Names.COL_FAVORITE})
替换为.columns(new String[]{"*"})
。