我正在尝试创建一个搜索函数,该函数接收一个字符串,搜索我的本地数据库,然后输出在字符串中找到的内容。之后我在btn点击显示字符串。
这是我的搜索功能。
public String Search(String n)
{
String info = "";
Cursor cu = HRdb.rawQuery("SELECT * FROM HRinfotbl WHERE (lname LIKE '"+n+"' OR fname LIKE '"+n+"';",null);
int count = cu.getCount();
cu.moveToFirst();
for (Integer j = 0; j < count; j++)
{
info = info +
"Surname : "+cu.getString(cu.getColumnIndex("lname"))+"\n"+
"Name : "+cu.getString(cu.getColumnIndex("fname"))+"\n"+
"Email : "+cu.getString(cu.getColumnIndex("email"))+"\n"+
"Contact : "+cu.getString(cu.getColumnIndex("contact"))+"\n\n";
cu.moveToNext() ;
}
HRdb.close();
return info;
}
这是其他可能影响它的代码。
Button search = (Button) findViewById(R.id.searchbtn);
search.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v)
{
dbView.setText(Search(searchtxt.getText().toString()));
}
});
希望有人能伸出援助之手,谢谢。
答案 0 :(得分:0)
我认为这不安全,我建议像这样搜索
Cursor cu = HRdb.rawQuery("SELECT * FROM HRinfotbl WHERE (lname LIKE ? OR fname LIKE ?;", new String[]{n, n});
答案 1 :(得分:0)
首先,存在SQL语法错误:最后缺少)
。你可以删除parens。
其次,对于LIKE
,您可能希望使用%
来匹配任意数量的字符。
第三,使用?
占位符并绑定参数,而不是在SQL中对任何用户输入进行硬编码。
示例:
Cursor cu = HRdb.rawQuery("SELECT * FROM HRinfotbl WHERE " +
"lname LIKE '%' || ? || '%' OR fname LIKE '%' || ? || '%'",
new String[] { n, n });
其中||
是字符串连接运算符。我也删除了;
,因为没有必要。