在多个数据库列中使用OR,AND进行Android SQLite搜索

时间:2013-05-10 12:56:47

标签: android sqlite multiple-columns

我想向我的数据库提供一个查询,该查询将搜索Column1或Column2中是否存在字符串,并且只有在Column3中存在另一个String值时才显示它。

这是我在2列中搜索的工作代码:

mCursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                 KEY_TIME, KEY_TITLE, KEY_COLOR, KEY_BODY}, 
                 KEY_BODY + " like '%" + inputText + "%' OR " + KEY_TITLE + " like '%" + inputText + "%'" , null,
                 null, null, KEY_TIME + " DESC", null);

我无法弄清楚如何将第三列添加到搜索中。

我试过了:

mCursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                     KEY_TIME, KEY_TITLE, KEY_COLOR, KEY_BODY}, 
                     KEY_BODY + " like '%" + inputText + "%' OR " + KEY_TITLE + " like '%" + inputText + "%' AND " + KEY_COLOR + "like '%" + colorvalue + "%'" , null,
                     null, null, KEY_TIME + " DESC", null);

但AND仅适用于“TITLE”列,而不适用于两者。我在网上搜索过但我无法理解。

您的帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您需要使用括号。

mCursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                 KEY_TIME, KEY_TITLE, KEY_COLOR, KEY_BODY}, 
                 "(" + KEY_BODY + " like '%" + inputText + "%' OR " + KEY_TITLE + " like '%" + inputText + "%') AND (" + KEY_COLOR + " like '%" + colorvalue + "%')" , null,
                 null, null, KEY_TIME + " DESC", null);

希望这有帮助。

答案 1 :(得分:2)

  

我想向我的数据库提供一个查询字符串的查询   存在于Column1或Column2中,并且仅在另一个String中显示它   值列在Column3中。

所以这不应该太棘手。您需要在语句中添加支持(首先包装或条件)然后一切都应该有效。

示例:

String query = "select * from SomeTable
                where (column1 like ? and column2 like ?) and column3 like ?";
String[] params = {"%" + param1 + "%", "%" + param2 + "%", "%" + param3 + "%"};
Cursor c = db.rawQuery(query, params);

让我知道。

注意:我真的不喜欢你的“训练”方法。我建议您使用参数化状态,这些更易于阅读比经典“硬编码”状态更安全。不要忘记SQL注射可能存在危险。