我有一个数组userNames,其中包含名称列表,但未预先确定。我必须查询一个数据库,该数据库仅返回具有该数组中任何用户名的rowID,只有它们的可用性为真。我想我可以通过使用下面的代码实现这一点,但在我看来,使用它的效率不高。
ArrayList<Long> rowIDs = new ArrayList<Long>();
for (int i = 0 ; i < userNames.length ; i++) {
String selection = Columns.NAME + "=? and " + Columns.AVAILABILITY + "=?";
String[] selectionArgs = { userNames[i], true };
Cursor c = getContentResolver().query(Columns.URI,null,selection,selectionArgs,null);
if (c.getCount() > 0) {
rowIDs.add(c.getLong(c.getColumnIndex(Columns.ID)));
}
}
包含用户名的数组中的userNames。如图所示,将一次又一次地访问db,这不是有效的,尤其是在有许多用户名的情况下。如果可能,提供一种有效的方法来实现它。
答案 0 :(得分:0)
我不知道你需要的地方......我想我们可以直接在查询中使用这个String query="SELECT * FROM users WHERE username IN (?,?,.......)";
Cursor cur=db.rawQuery(query,new String[]{'name1','name2',....});
。这是我记得的一种方法。
但如果你发现了一些好的东西,请告诉我......
THX
答案 1 :(得分:-1)
试试这个:
ArrayList rowIDs = new ArrayList();
String users="";
for (int i = 0 ; i < userNames.length ; i++) {
users=users+","+userNames[i];
}
String selection = Columns.NAME + " in (?) and " + Columns.AVAILABILITY + "=?";
String[] selectionArgs = { users[i], true };
Cursor c = etContentResolver().query(Columns.URI,null,selection,selectionArgs,null);
if (C.moveToFirst()) {
do{
rowIDs.add(c.getLong(c.getColumnIndex(Columns.ID)));
}while(c.moveToNext());
}
您也可以使用like
代替IN