SupportSqliteQueryBuilder提供错误的查询结果 [英] SupportSqliteQueryBuilder giving a wrong query results

查看:37
本文介绍了SupportSqliteQueryBuilder提供错误的查询结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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
  1. 为什么争论没有传递到此语句中?为什么只生成了favouritefavourite=1

  2. 有没有办法在查询中生成*?写所有的连名而不是*很痛苦

sql

老实说,我会为此使用一个原始查询,使用基于fav的不同推荐答案字符串。但是,如果您确实要使用SupportSQLiteQueryBuilder.

关于第1项,通常在运行时计算位置参数,这也是SupportSQLiteQueryBuilderAPI的目标。因此,您可以:

  • 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[]{"*"})

这篇关于SupportSqliteQueryBuilder提供错误的查询结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆