2

誰かが私に言った:
次のコードでは、パラメータ「2」はvar numberType用で、パラメータ「5」はvar id用です

Cursor cursor = db.rawQuery("SELECT * FROM mytable where numberType=? and id=?", new String[] { "2","5" });

次のコードでは、パラメーター "6" とパラメーター "4" の両方が var id 用です。コードがエラーを引き起こすと思います. new String[]{"6","4"} は2つの変数に一致する必要があると思いますよね?

db.delete("person", "id"+"=?", new String[]{"6","4"});

db.delete (...) を使用して、 delete from test.db where id in ('6','4')! のように同じ関数を実装することはできません。 右 ?

AndroidでrawQueryに2つのパラメータを渡すにはどうすればよいですか?
AndroidでInパラメータを使用してレコードを削除する必要がある場合、コードを作成するにはどうすればよいですか?

4

3 に答える 3

2

コードはエラーを引き起こすと思います. new String[]{"6","4"} は2つの変数に一致する必要があると思いますよね?

簡単な答え:はい。このコードは機能しません。

説明:

2 つのパラメーターをバインドします。つまり、2 つのプレースホルダー?を bindArgs 1 (この場合は 6 と 4) に置き換えます。

ステートメント内のパラメーターの数は、ステートメントにバインドされたパラメーターの数と一致する必要があります。したがって、クエリに3 つのパラメーターがある場合 (そうでない場合、例外がスローされます):

select * from Users where id = ? and age = ?

同じ数のパラメーター (項目) でwhereArgs文字列配列を作成する必要があります。

String[] whereArgs = {"20345", "18"};

SQLiteDatabase は、Android で 1 つの変数または 2 つの変数のパラメータをどのように区別しますか?

上で説明した。あなたの場合の正しい解決策は次のとおりです。

  • WHERE句に 2 番目のパラメーターを追加する
  • 文字列配列から 2 番目の項目を削除する

次のようになります。

db.delete("person", "id = ? and pin = ?", new String[] {"6", "4"});
db.delete("person", "id = ?", new String[] {"6"});
db.delete("person", "id in(?, ?)", new String[] {"6", "4"});


1置き換えは、従来の Java と同じです。クエリの最初のパラメーターは、配列の最初の項目などに置き換えられます。

于 2013-11-01T13:02:04.470 に答える
1

これを使用します。db.execSQL("ID IN (1,2) のテーブル名から削除"); 幸運を!

于 2013-11-05T04:20:29.453 に答える
0

以下のように同じテーブルから削除できます。

DELETE FROM mytable WHERE id IN (
    SELECT pid FROM (
        SELECT person.id AS pid FROM person) AS ptable
    )

これで、必要に応じてネストされたクエリを変更できます。

PS: 方向性を示すためだけにこれを書きました。

于 2013-11-05T01:41:02.710 に答える