如何在"查询"方法中传递两个或多个选择参数

Pan*_*mar 9 android

我正在使用查询方法,但我不知道如何在查询方法中传递多个选择参数.

我的查询方法应该返回与此sql语句相同的结果:

SELECT _id FROM CONATCT_TAGS WHERE TAG1='tagname' OR
                                   TAG2='tagname' OR 
                                   TAG3='tagname' OR 
                                   TAG4='tagname' OR
                                   TAG5='tagname';

dbm*_*dbm 48

如果您想在Android SQLite连接中使用内置优化,您可以执行以下操作:

String table = "CONTACT_TAGS";
String[] columns = {"_id"};
String where = "TAG1=? OR TAG2=? OR TAG3=? OR TAG4=? OR TAG5=?";
String[] args = {"tagname", "tagname", "tagname", "tagname", "tagname"};

SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();
Cursor cursor = db.query(table, columns, where, args, null, null, null);
Run Code Online (Sandbox Code Playgroud)

与@ raultum解决方案的不同之处在于,您让数据库连接器决定如何解释提交的数据.从安全角度来看,这是非常有趣的.

  • 您希望使用此解决方案,因为正确使用`args`参数来使用它来避免SQL注入 (2认同)
  • 有没有人得到这个工作?当我尝试它离开'?' 在所有领域,而不是在我的args中. (2认同)

rau*_*ltm 11

尝试类似的东西......

SQLiteDatabase db = YourDatabaseHelper.getReadableDatabase();
String TABLE = "CONTACT_TAGS";
String[] FIELDS = { "_id" };
String WHERE =  "TAG1='tagname' OR TAG2='tagname' OR TAG3='tagname' OR TAG4='tagname' OR TAG5='tagname' ";
// Execute
cursor = db.query(TABLE, FIELDS, WHERE, null, null, null, null);
Run Code Online (Sandbox Code Playgroud)

如果您阅读Cursor.query()方法的文档,您会找到selection如下定义:

selection:一个过滤器,声明要返回哪些行,格式化为SQL WHERE子句(不包括WHERE本身).传递null将返回给定表的所有行.