如何从两个不同的列中进行搜索?

时间:2019-01-22 19:24:36

标签: sql sqlite select

因此,我创建了一个包含两列的数据库,即名称和信息。现在,对于用户的搜索功能,如果用户键入类似于信息或名称的信息,我希望它显示在屏幕上。截至目前,它只能做一个或另一个,我不能同时做两个。因此,我知道问题出在数据库中的select方法中。截至目前,它已设置为:

现在,如果我输入“ Info Like?”,它将显示基于“ Info”列的搜索,以及是否将其更改为“ Name Like?”。它显示基于名称列的搜索。

   public List<myList> getNameandInfo(String text) {
     SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();


    //Column Name from database table
    String[] sqlSelect = {"Name", "Info"};
    String tableName = "Grocery"; // table name

    qb.setTables(tableName);

    //This line of code only shows result for Info column
 Cursor cursor = qb.query(db, sqlSelect, "Info LIKE ?", new String[]{"%" + 
 text + "%"}, null, null, null);
    List<Mylist> result = new ArrayList<>();
    if (cursor.moveToFirst()) {
        do {
            Mylist myList = new Mylist();

    myList.setName(cursor.getString(cursor.getColumnIndex("Name")));

    myList.setInfo(cursor.getString(cursor.getColumnIndex("Info")));

            result.add(myList);
        }
        while (cursor.moveToNext());
    }
    return result;
}

//tried this line of code but it crashes the app
   Cursor cursor = qb.query(db, sqlSelect, ("Name LIKE ?")+("Info LIKE ?"), new String[]{"%" + text + "%"}, null, null, null);

2 个答案:

答案 0 :(得分:1)

从以下位置更改WHERE部分:

("Name LIKE ?")+("Info LIKE ?")

收件人:

"Name LIKE ? AND Info LIKE ?"

或者您可能需要OR
另外,对于参数,您需要2个字符串,而不仅仅是1:

"%" + text + "%"

因此请更改为以下内容:

new String[]{"%" + text1 + "%", "%" + text2 + "%"}

如果您只有1个值来同时检查“名称”和“信息”:

 new String[]{"%" + text + "%", "%" + text + "%"}

答案 1 :(得分:1)

也许您可以在查询中使用OR:

Cursor cursor = qb.query(db, sqlSelect, ("Name LIKE ? OR Info LIKE ?"), new String[]{"%" + text + "%"}, null, null, null);