2017-10-30 24 views
17

Android StudioのクラスでSQLite文を文字列リテラルとして入力すると、IDEから次の警告が表示されます:"<expr> expected, got '?'"<expr>が必要ですが、 '?'

これは何を意味するのか分かりませんが、コードはうまくいきました。検査を無効にしたいと思います。しかし、どの検査がそれを引き起こしているのか分かりません。何千ものものがあり、検索するか期待すると有用な結果は得られません。

Androidスタジオのバージョンは3.0です。異なる文の全体の束で起こっているが、代表的なものは次のようになります。

SQLiteStatement st = db.compileStatement(
    "INSERT OR REPLACE INTO routes(route_code, route_desc) VALUES(?,?)" 
); 
+0

完全なクエリステートメントを投稿できますか?あなたはAndroid Studioのどのバージョンを使用していますか? –

+0

最新バージョン(3.0)。 SQLiteStatement st = db.compileStatement( "INSERT OR REPLACE INTO routes(route_code、route_desc)VALUES(?、?)");これは、次のようになります。 – user92238

+0

私は周りを見て、それはAndroidスタジオ3.0 +からSQLiteの構文チェッカーははるかに厳しいように見えます。しかし、私はそれが最後のコンマと疑問符の間のスペースを期待していると思います。スペースを追加して、それが機能するかどうか試してみてください。ここでいくつかのリンク:https://stackoverflow.com/questions/44205651/android-studio-3-0-canary-1-sql-syntax-error https://stackoverflow.com/questions/46165045/android-sqlite-あなたのコードは上手くいなければなりません.SQLiteは構文をどのように処理するかをまだ知っていますが、より良い構文上の習慣を適用したいだけです。 –

答えて

3

これは、Android Studioの3.0のバグで、すでにhereを報告しています。これは3.1版でも修正されました。私は最新のCanary 5 3.1ビルドを使用しています。うまく動作します。

3.0パッチがもう存在しないので、回避策をとるか、この糸くずチェックを無効にするだけです。

+0

私はAS 3.01を使用し、Lintは「INSERT INTO ... VALUES(?、?)」の最初の疑問符について不平を言います。私は動作する回避策が表示されません。私は生産環境でCanaryを使用しません。私はすべての構文チェックではなく、Lintでこのチェックだけを無効にする方法を知らない:... / –

関連する問題