在android中按名称搜索记录

时间:2012-12-05 21:26:07

标签: android sqlite

我用sq-lite

创建了这个表
String TABLE_CREATE_QUERY = 
            "create table contacts(id integer primary key autoincrement,name text not null, fname text not null, regid integer unique not null,year text not null, email text not null, phone text not null, address text not null)";

并且有一种按名称搜索记录的方法

public Cursor searchByName(String name)
    {

        return db.query(DATABASE_TABLE, new String[] {"id","name", "phone"},
"name="+name, null, null, null, null);
    }

现在,当我想像这样搜索uzair的记录时,我收到了一个错误。

open(); //open database;
 Cursor c=searchByName("uzair");
close();  //close database.

任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:0)

您没有将SQL字符串包装在引号中:"name='"+name+"'"
但实际上你应该参数化你的查询以保护你的数据库免受注入攻击:

return db.query(DATABASE_TABLE, new String[] {"id","name", "phone"}, 
        "name=?", new String[] {name}, null, null, null);

(如果这不是整个解决方案,您需要发布LogCat错误,以便我们不必猜测。)


<强>加成
您添加了此评论:

  

if(student_name.length()>0) { open(); Cursor c= searchByName(student_name); c.moveToFirst(); names=new String[c.getCount()]; for(int i=0;i<names.length;i++) { names[i]=c.getString(1); } db.close(); }

假设此代码无法正常工作,但我必须再次猜测 ...点击您左下角的"edit"将此代码和 LogCat错误添加到原始帖子的问题。

无论如何,我可以看到你没有在循环中使用moveToNext()

for(int i=0;i<names.length;i++) { 
    names[i]=c.getString(1); 
    c.moveToNext();
}