在我的项目中,我必须选择多个值并将其传递给查询。例如,page1包含复选框。我正在将选中的复选框id存储到一个数组中。我正在对该数组进行混洗,并随机获取这些值。现在,我需要将这些随机值传递给一个查询。在数据库中使用IN操作符,我可以静态地传递这些值,但是如何将这些值动态地传递给查询呢?
对于ex:(静态传值)
SELECT * FROM Persons WHERE person_id IN ('21','22')在上面的查询中,id的21和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.发布于 2012-09-03 14:34:55
String query = "SELECT * FROM Persons WHERE person_id IN (" + TextUtils.join(",", chksublist) + ")";
但是,在将chksublist发送到您的SQL查询之前,对它进行混洗对从SQL获得的结果集没有影响。它不会随机地改变你的结果。删除Collections.shuffle(chksublist);并使用
String query = "SELECT * FROM Persons WHERE person_id IN (" + TextUtils.join(",", chksublist) + ") ORDER BY RANDOM()";
发布于 2012-09-03 14:22:46
查看如何动态传递值
// 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;
}发布于 2012-09-03 14:29:03
您可以像这样生成查询
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+=")";最后传递这个查询。
https://stackoverflow.com/questions/12242879
复制相似问题