1

アプリケーションのフォーム内で渡されたいくつかのパラメーターに基づいて特定のレコードを返すこのクエリがあります。ここで問題が発生します。

String[] args={"act_email,act_password"};
Cursor cursor= db.query(DB_TABLE_NAME,new String[]{"email","password"},"email"+" like" + " %?%"+"AND"+" password "+" like" + " %?%",new String[]{"act_email,act_password"},null,null, null);

オンラインで見つけたコードを次に示します。

 Cursor cursor= db.rawQuery("SELECT email,password  FROM users WHERE email LIKE '%' || ? || '%' and  password LIKE '%' || ? || '%'",args);

このコードは問題を引き起こしませんが、主に常に空の値を返すため、最適化が必要です。この問題を解決する方法について何か提案はありますか?

4

4 に答える 4

3

なぜそんなに連結するのですか?

最初のwhere-conditionと。の間にスペースがありませんAND

"email like '%?%' AND password like '%?%'"3番目の引数として使用します。

また、データベースに保存されているパスワードの一部であるすべてのパスワード入力を受け入れてもよろしいですか?この場合、パスワードが「thejdsfsdaf2313 !!!」であっても、「e」は有効な入力になります。

于 2011-08-24T10:34:55.903 に答える
1

このように試しましたか?例を挙げました。

  Cursor cursor1=db.rawQuery("SELECT taskid,taskname,taskdescription,tasktime,issync,userid,taskdate FROM task WHERE taskname like '%"+strTaskName+"%'", null);
于 2011-08-25T10:38:02.080 に答える
1

2 つの要素の間に引用符がないため、引数が正しくありません...中かっこの間に 2 つの別個の文字列が必要です。これは次のようになります。

String[] args= {"act_email","act_password"};

編集(開始)

次に '、クエリ選択文字列にテキスト修飾子がありません。テキスト フィールドの場合、次の形式にする必要があります。

フィールド='?'

SQLite は独自に引用符を処理するように見えるため、次の形式で where 句を指定するだけで済みます。

field=? [ AND field2=? ... AND fieldn=? ]

次に、args 配列にパラメーターを指定します。Android の OpenDatabaseHelper クラスは、タイプに応じてテキスト修飾子を自動的に処理するようです。

編集(終了)

%この方法で Android で SQLite を使用する際のパラメーター化されたクエリは、クエリ文字列のワイルドカードを好まないことに注意してください。ワイルドカードを使用するには、代わりにそれらを arg 値に配置します。これは実行中に代入されます。したがって、引数は次のようになります。

String[] args= {"%act_email%","%act_password%"};

または、ここで変数を使用する場合:

String[] args= {"%" + act_email + "%", "%" + act_password+ "%"};

したがって、完全なコードは次のようになります。

String[] fields = {"email","password"};
String[] args= {"%" + act_email + "%", "%" + act_password+ "%"};

//do not use like for usr & pwd
String where = "email like ? AND password like ?";

Cursor cursor= db.query(DB_TABLE_NAME, fields , where, args,null, null, null);

メールとパスワードの場合は、使用しないでくださいlike

where 句を次のように変更します。

String where = "email=? AND password =?";//do not use like for usr & pwd
于 2011-08-25T09:05:45.160 に答える
1
String[] args={"act_email,act_password"};
      Cursor cursor= db.query(DB_TABLE_NAME,new String[]{"email","password"},
"email like '%"+args[0]+"%' and password like '%"+args[1]+"%'",args,null,null, null);
于 2011-08-24T10:40:25.573 に答える