私は空のカーソルを与えるこの rawQuery を書きました:
String query = "SELECT * FROM " + TBL_NAME + " WHERE ? = ?";
String[] args = new String[] {COL_NAME, Long.toString(id)};
Cursor c = db.rawQuery(query, args);
しかし、次のクエリを実行すると、期待どおりの結果が得られます。
String query = "SELECT * FROM " + TBL_NAME + " WHERE " + COL_NAME + " = " + Long.toString(id);
Cursor c = db.rawQuery(query, null);
「rawQuery」メソッドの引数の 1 つとしてテーブル名を使用できないことがわかりました。しかし、なぜそうでないのかはわかりません(引数を「 」で囲んでいると思いますが、推測にすぎません)。
それ以外は、クエリにユーザー入力を含めるためにのみ引数を使用する必要があるという結論に達しましたSQLiteStatement
。
要約すると、rawQuery で args を使用する必要がある場所 (および可能であれば理由) は、(単に文字列に連結するのではなく) 必要があります。また、SQLiteStatement (または単にクエリ) の代わりに rawQuery を使用する必要があるのはなぜですか?