-3

我在 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.

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

4

1 回答 1

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(); }

假设这段代码不能以某种方式工作,但我不得不再次猜测......单击问题左下角的“编辑” ,将此代码和LogCat 错误添加到您的原始帖子中。

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

for(int i=0;i<names.length;i++) { 
    names[i]=c.getString(1); 
    c.moveToNext();
} 
于 2012-12-05T21:36:38.777 回答