SQLite - 查询其中selectionArgs包含数组的数据库

时间:2014-05-21 05:43:57

标签: android sqlite

我有一个数组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,这不是有效的,尤其是在有许多用户名的情况下。如果可能,提供一种有效的方法来实现它。

2 个答案:

答案 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