显示不同的记录sqlite android

时间:2013-03-02 14:58:12

标签: android sqlite

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

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

FYI,

   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

请帮我确定一下这里似乎缺少什么。真的很感激任何帮助。

enter image description here

2 个答案:

答案 0 :(得分:6)

<强>解决方案
您需要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和条件列。它相当于:SELECT DISTINCT(_id, conditions) ...显然,你只需要不同的条件......

答案 1 :(得分: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适用于DISTINCT,因此请将其提供为true。 所以你的query会喜欢这个

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

基本上 DISTINCT关键字只返回一次列名称,如果它的上瘾次数超过一次。