0

即使我将 distinct 设置为 true,我的光标也会返回两次记录:

return myDataBase.query(true, DB_TABLE, new String[] {"rowid as _id", KEY_CONDITIONS}, builder.toString(), 症状, null, null, null, null);

供参考,

   public Cursor getData(String[] symptoms) {
    String where = KEY_SYMPTOMS + "= ?";
    String orStr = " OR "; 

    StringBuilder builder = new StringBuilder(where);
    for(int i = 1; i < symptoms.length; i++)
        builder.append(orStr).append(where);

    return myDataBase.query(true, DB_TABLE, new String[] 
            {"rowid as _id", KEY_CONDITIONS}, builder.toString(), symptoms, null, null, null, null);

}

或者我尝试更改为 rawQuery

    return myDataBase.rawQuery("SELECT DISTINCT " + KEY_CONDITIONS + " FROM " 
    + DB_TABLE + " " + builder.toString() + symptoms.toString(), null);

我的 LogCat 说:

  03-02 22:57:02.634: E/AndroidRuntime(333): FATAL EXCEPTION: main
  03-02 22:57:02.634: E/AndroidRuntime(333): android.database.sqlite.SQLiteException: near "=": syntax error: , while compiling: SELECT DISTINCT conditions FROM tblSymptoms symptoms= ? OR symptoms= ?[Ljava.lang.String;@405550f8

请帮助我确定这里似乎缺少什么。任何帮助都非常感谢。

在此处输入图像描述

4

2 回答 2

7

解决方案
您需要DISTINCT条件,但 Android 需要_id有问题的列,因为您不能混合和匹配:SELECT _id, DISTINCT condition...。但是,您可以改用该GROUP BY子句:

return myDataBase.query(DB_TABLE, new String[] {"rowid as _id", KEY_CONDITIONS}, 
        builder.toString(), symptoms, KEY_CONDITIONS, null, null);

说明
此查询:

return myDataBase.rawQuery("SELECT DISTINCT " + KEY_CONDITIONS + " FROM " 
    + DB_TABLE + " " + builder.toString() + symptoms.toString(), null);

由于您传入String[] symptoms了错误的参数而失败,请尝试:

return myDataBase.rawQuery("SELECT DISTINCT " + KEY_CONDITIONS + " FROM " 
    + DB_TABLE + " " + builder.toString(), symptoms);

这个查询:

return myDataBase.query(true, DB_TABLE, new String[] {"rowid as _id", KEY_CONDITIONS}, builder.toString(), symptoms, null, null, null, null);

失败,因为DISTINCT正在查看id 和 condition 列它相当于:SELECT DISTINCT(_id, conditions) ...显然,您只想要不同的条件......

于 2013-03-02T15:03:36.790 回答
0

你有两个通用选项两个做这个任务 使用行查询**和**使用 DISTINCT 关键字

对于使用行查询,您可以直接使用 mr.Sam 的功能,对于使用 DISTINCT 关键字,您可以使用

public Cursor query (boolean distinct, String table, String[] columns, 
                 String selection, String[] selectionArgs, String groupBy,
                 String having, String orderBy, String limit)

因为查询 stucher 是retuns这样的:

query(false, table, columns, selection, selectionArgs, groupBy,
            having, orderBy, null /* limit */);

在此代码中,第一个 arg 是 forDISTINCT所以将其提供为true. 所以你query会喜欢这样

Cursor cursor = db.query(true, YOUR_TABLE_NAME, new String[] { COLUMN1 ,COLUMN2, COLUMN_NAME_3 }, null, null, COLUMN2, null, null, null);

基本上,如果DISTINCT 关键字出现一次以上,则仅返回一次列名。

于 2015-06-18T07:55:39.717 回答