0

個別を true に設定しても、カーソルがレコードを 2 回返します。

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);

は id 列と condition 列の両方DISTINCTを参照しているため、失敗しました。これは次と同等です:あなたは、明らかに、明確な条件のみが必要です... SELECT DISTINCT(_id, conditions) ...

于 2013-03-02T15:03:36.790 に答える
0

2 つの一般的なオプションがあります 2 つはこれを行います タスク 行クエリを使用する **および **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 */);

このコードでは、最初の引数は for で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 キーワードは、列名が複数回出現する場合、列名を 1 回だけ返します。

于 2015-06-18T07:55:39.717 に答える