2013-03-01 26 views
0

我正在一个症状检查android应用程序,其中用户可以检查他可能有多少症状。请你检查我所到目前为止已经试过:android sqlite记录多重搜索

public String getData(String[] symptoms) { 
    String search = ""; 
    Cursor c = myDataBase.query(DB_TABLE, new String[] 
      {KEY_CONDITIONS}, KEY_SYMPTOMS + "= ? ", symptoms, null, null, null); 

    c.moveToFirst(); 

    while (c.isAfterLast() == false) { 
     search += c.getString(0) + ", "; 
     c.moveToNext(); 
    } 

    return search; 

} 

,但我需要生成字符串地方动态,因为我不知道有多少症状会被选中。我将如何做到这一点?从你的帮助将真正被赞赏。谢谢!

回答

1

关键是你必须每个串在你的数组一个插入字符(?)。

一种解决方案是使用一个循环:

String where = KEY_SYMPTOMS + " = ?"; 
String relation = " OR "; /* Maybe " AND "? */ 

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

Cursor c = myDataBase.query(DB_TABLE, new String[] 
     {KEY_CONDITIONS}, builder.toString(), symptoms, null, null, null); 

你也可以写一个短,但等效回路:

while (c.moveToNext()) 
    search += c.getString(0) + ", "; // A StringBuilder should be faster 
+0

感谢您的快速反应。如何限制结果中的重复记录? – 2013-03-01 17:38:52

+0

使用不同的['query()'](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#query%28java.lang.String,%20java.lang.String [] ,%20java.lang.String,%20java.lang.String [],%20java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String%29)一个限制。 (在你的curreny query()'的末尾添加''“10”')。 – Sam 2013-03-01 17:41:21

+0

我的意思是,如果用户选择多个症状,并且病情/疾病有很多症状,当然这种情况会显示更多而不是基于用户选择的症状。 – 2013-03-01 17:45:43