0

私はsqliteクエリを持っています:

rawQuery("select * from ? where ?=?", new String[] {
                DBTABLE_PROFILE, KEY_PROFILE_ID, Integer.toString(profileID) });

しかし、Androidは私に

E/AndroidRuntime(7323): Caused by: android.database.sqlite.SQLiteException:   
near "?": syntax error (code 1): , while compiling: select * from ? where ?=?

私はどれをテストしましたか?問題を引き起こしていて、それが最初のものであることが判明しました。に変更すると

"select * from profile where ?=?"

FCではありません。

したがって、テーブル名を「?」に置き換えることはできますか?

[編集]:

制限なしでrawQueryのような機能を実現するための回避策があります。以下の私の答えを参照してください。

4

3 に答える 3

2

いいえ。置換する必要のあるパラメータ?はクエリ変数のみであり、テーブル名や列名ではありません。

正しいクエリは次のとおりです。

rawQuery("select * from " + DBTABLE_PROFILE + " where " + KEY_PROFILE_ID + "=?",
            new String[] { Integer.toString(profileID) });
于 2012-10-08T19:50:59.270 に答える
0

あなたがそれをテストしたなら、あなたは答えを持っています。

よくわかりませんが、rawQueryがバックグラウンドで文字列連結を行っていないためだと思います。ストアドプロシージャなどを準備してから、値をプロシージャオブジェクトにエスケープします。そのため、プロシージャを作成するにはテーブル名を知っている必要があるため、テーブル名の代わりに置換を使用することはできません。

于 2012-10-08T19:52:02.640 に答える
0

ポインタを提供してくれたSamのおかげで、制限の数が多いため、rawQuery(String、String [])を使用しても驚くほど愚かでした。

IMOは、制限なしでrawQueryのような機能を実現するための最良の方法は、string.format()でrawQuery(String)を使用することです。

元:

 rawQuery(String.format("select * from %s where %s=%d",
                DBTABLE_PROFILE, KEY_PROFILE_ID, profileID));
于 2012-10-08T20:27:03.910 に答える