用android搜索函数SQLite数据库

时间:2014-01-14 12:35:23

标签: android sqlite

我正在尝试创建一个搜索函数,该函数接收一个字符串,搜索我的本地数据库,然后输出在字符串中找到的内容。之后我在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()));

        }
        });

希望有人能伸出援助之手,谢谢。

2 个答案:

答案 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 });

其中||是字符串连接运算符。我也删除了;,因为没有必要。