-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 に答える