因此,我创建了一个包含两列的数据库,即名称和信息。现在,对于用户的搜索功能,如果用户键入类似于信息或名称的信息,我希望它显示在屏幕上。截至目前,它只能做一个或另一个,我不能同时做两个。因此,我知道问题出在数据库中的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);
答案 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);