2012-09-03 29 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

我已更新我的查询 –

相关问题