2013-03-01 63 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