2012-09-03 66 views
2

在我的項目中,我必須選擇多個值並將其傳遞給查詢。即page1包含複選框。我將選中的複選框ID存儲到數組中。 我正在洗牌該數組並隨機獲取值。現在我需要將這些隨機值傳遞給查詢。在數據庫中使用IN運算符我可以靜態傳遞值 ,但是如何將這些值動態傳遞給查詢。如何傳遞多個值來在android中動態查詢?

對於前:(傳遞值靜態)

SELECT * FROM Persons WHERE person_id IN ('21','22') 

在上面的查詢編號的2​​1和22是以前知道,所以我們正在通過靜態,但我想發送的值來動態查詢。

Page1: 
public static ArrayList<String> chksublist = new ArrayList<String>(); 

Page2: 
Collections.shuffle(chksublist); 
SELECT * FROM Persons WHERE person_id IN ('21','22') 
In the above line I want to send the random values which are in chksublist array. 
+0

使用例如構建查詢字符串'TextUtils.join'。在將數組發送到SQL查詢之前將數組進行整理有什麼意義? – biegleux

+0

檢查此鏈接http://www.vogella.com/articles/AndroidSQLite/article.html – shassss

回答

2

String query = "SELECT * FROM Persons WHERE person_id IN (" + TextUtils.join(",", chksublist) + ")";

但它發送給你的SQL查詢之前洗牌的chksublist對結果沒有任何影響集從SQL得到嘗試。它不會隨機排列你的結果。刪除Collections.shuffle(chksublist);和使用

String query = "SELECT * FROM Persons WHERE person_id IN (" + TextUtils.join(",", chksublist) + ") ORDER BY RANDOM()";

1

看到值dynamicaly通過

// Getting single contact 
public Contact getContact(int id) { 
SQLiteDatabase db = this.getReadableDatabase(); 

Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, 
     KEY_NAME, KEY_PH_NO }, KEY_ID + "=?", 
     new String[] { String.valueOf(id) }, null, null, null, null); 

// here new String[] { String.valueOf(id) } value is added dynamicaly which is passed to the function 
if (cursor != null) 
    cursor.moveToFirst(); 

Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), 
     cursor.getString(1), cursor.getString(2)); 
// return contact 
return contact; 
} 
1

可以生成你這樣的查詢

int values[];  //it contains your generated values like 21,22.... 
String query="SELECT * FROM Persons WHERE person_id IN ("; 

for(int i=0;i<values.length;i++){ 
query=query+"'"+values[i]+"'"; 
if(i<values.length-1){ 
query=query+","; //No , after last values 
} 

} 
query+=")"; 

終於通過此查詢。

+0

嗨感謝您的答覆...我保持像字符串查詢=「選擇c。*從表1 c,表2 q WHERE c。 CID = q.cid AND c.id IN( 「; \t \t對(INT I = 0; I <的Integer.parseInt(未);我++){ \t \t查詢=查詢+」'「+ chksublist.get( ⅰ)+ 「' 」; \t \t如果(I'(chksublist.size() - 1)){ \t \t查詢=查詢+「,」; \t \t} \t \t} \t \t query + =「)」+「AND q.choicetoselect = 1 ORDER BY RANDOM()LIMIT」+ un +「」;但它在查詢中顯示錯誤..plz幫助我在哪裏出錯 – Amrutha

+0

首先嚐試靜態運行完整查詢。然後構建類似的字符串。也可以通過打印最終查詢來查看錯誤。 – Rasel

+0

優秀的工作@Rasel。謝謝一噸。爲我節省了幾個小時。 –

0

cursor = database.query(tablename, 
        new String[] {"TopName"}, "id IN(?,?)", new String[]{"2","3"}, null, null, null); 

使用原始查詢

String query = "SELECT * FROM Persons WHERE person_id IN ("+parameter1+","+parameter2+")"; 
db.rawQuery(query); 
+0

我已更新我的查詢 –

相關問題