即使我将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
请帮我确定一下这里似乎缺少什么。真的很感激任何帮助。
答案 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关键字只返回一次列名称,如果它的上瘾次数超过一次。