2012-10-21 27 views
0

我的應用程序是一個小問題的應用程序,我從數據庫中獲得問題。這個應用程序中還有一些主題,我想通過在數據庫中設置一個專門用於保存與問題所屬類別相對應的值的方法來實現此目的。我試過導入一個布爾值arraylist的靜態arraylist。然後我想遍歷它們來創建基於值是否爲真的數組(我的應用程序允許多個類別被選中)。問題是將它(創建的arraylist控制主題)合併到我的查詢語句中。我猜這個目標是類似於-if第二列包含這些值然後將它們添加到查詢中的 - 我認爲這可能是兒童玩的直接SQL原始查詢語句,但tbh看起來令人望而生畏,所以我只能讓自己感到舒服與Android的替代。基於字符串數組在數據庫中選擇特定的行

public Cursor getQuestions() { 

    List<String> topicsList = new ArrayList<String>(39); 
    for(int i = 0; i < child_check_states.size(); i++) { 
     for(int j = 0; j < child_check_states.get(i).size(); j++) { 
      if (child_check_states.get(i).get(j) == true) { 
       topicsList.add(i+""+j+""); 
      } 
     } 
    } 
    Log.d("test", topicsList.toString()); 

    SQLiteDatabase db = getReadableDatabase(); 
    Cursor cursor = db.query(DB_NAME, null, null, null, null, null, "random()"); 
    return cursor; 
} 

這是無關緊要的問題,不需要回答,但是對於像這樣的隨機化行,可能存在性能問題嗎?我相信我讀過一次更好的實現方法,使用兩個遊標來實現這一點。我的應用程序只有4行進行測試,所以我沒有注意到任何東西,但最終我想有數千個。也許成千上萬。

+1

我猜你想過濾來自數據庫的問題,只有從大類問題由用戶選擇?如果是的話,你如何存儲這些類別(它是標題中的字符串數組資源?)? – Luksprog

+0

答案是肯定的。我將那些類別存儲在那個數組列表中:列表 topicsList。我很抱歉,如果不清楚,我想在需要的時候使用.toArray方法。 – mango

回答

0

只要用「IN」的關鍵字,例如

SELECT * from my_table where category IN (category_1, category_3, category_4) 

,或者在你的例子

public Cursor getQuestions() { 

List<String> topicsList = new ArrayList<String>(39); 
for(int i = 0; i < child_check_states.size(); i++) { 
    for(int j = 0; j < child_check_states.get(i).size(); j++) { 
     if (child_check_states.get(i).get(j) == true) { 
      topicsList.add(i+""+j+""); 
     } 
    } 
} 
Log.d("test", topicsList.toString()); 

String replacementString = "(?"; 
for(int i = 1 ; i < topicsList.size(); i++){ 
    replacementString += ", ?"; 
} 

replacementString += ")"; 

SQLiteDatabase db = getReadableDatabase(); 
Cursor cursor = db.query(DB_NAME, <your_columns>, <category_column> IN + replacementString, topicsList.toArray(new String[topicsList.size()]), null, null, "random()"); 
return cursor; 
+0

這對我的代碼來說會是什麼樣子?隨機順序。類別是否指列名稱?你是說我應該把我的數組列表變成由逗號分隔的字符串,並將其作爲參數放入? – mango

+0

如果你想使用db.query - 你應該把選擇參數: IN?,然後把你的list.toArray()中的值放在selectionArgs參數中 –

+0

是錯誤的'Cursor cursor = db .query(DB_NAME,null,「主題IN」,新的String [] {「C1」,「P1」,「B1」,「O1」},null,null,「random()」);' '10-21 17:11:55.193:E/AndroidRuntime(545):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.mangodeveloper.mcathomie/com.mangodeveloper.mcathomie.McatActivityGame}:android.database.sqlite。 SQLiteException:接近「?」:語法錯誤:編譯時:SELECT * FROM mcatqa WHERE topic IN? ORDER BY random()'與數組方法相同 – mango

相關問題