<expr>期望得到的是什么?收到了“?”

31

在Android Studio的类中,当将SQLite语句作为字符串字面值输入时,IDE会给出警告:"<expr> expected, got '?'"

我不理解这是什么意思,但代码运行良好,我想禁用此检查。但我不知道哪个检查导致了这个问题。有成千上万个检查项,搜索<expr>或expected没有任何有用的结果。

Android Studio的版本是3.0。这种情况发生在很多不同的语句中,但典型的一个看起来像这样:

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

你能发布完整的查询语句吗?另外,你使用的是哪个版本的Android Studio? - cincy_anddeveloper
最新版本(3.0)。它会发生在许多不同的语句中,但典型的语句看起来像这样:SQLiteStatement st = db.compileStatement("INSERT OR REPLACE INTO routes(route_code, route_desc) VALUES(?,?)"); - Flarosa
我查了一下,似乎从Android Studio 3.0+开始,SQLite语法检查变得更加严格了。但是我认为它期望在最后一个逗号和问号之间有一个空格。尝试添加空格,看看是否有效。这里有一些链接:https://stackoverflow.com/questions/44205651/android-studio-3-0-canary-1-sql-syntax-error https://dev59.com/_qXja4cB1Zd3GeqPLxUs 注意:你的代码应该没问题,SQLite仍然知道如何处理这些语法,AS只是想强制执行更好的语法规范。 - cincy_anddeveloper
1
谢谢留言。添加空格并没有解决问题。实际上,有些语句只有一个问号也会出现这种情况。我该如何访问和禁用这些SQLite警告?我在偏好设置中找不到它们。 - Flarosa
2
这个问题有一个错误报告:https://issuetracker.google.com/issues/68403417 - laalto
3
谢谢。目前,我通过在单独的一行上声明字符串来解决了这个问题。 - Flarosa
1个回答

12

这是 Android Studio 3.0 的一个 bug,已经在这里报告过。此问题已在 3.1 版本中得到解决。我正在使用最新的 Canary 5 3.1 版本,一切正常。

由于不会再推出更多 3.0 补丁程序,目前你可以采用解决方法或禁用此 lint 检查。


2
我使用AS 3.01,Lint抱怨“INSERT INTO ... VALUES(?,?)”中的第一个问号。我看不到任何可行的解决方法。我不会在生产环境中使用Canary。我不知道如何仅禁用Lint中的此检查而不是所有语法检查... :/ - The incredible Jan
5
不,这个错误在AS 3.1.2中没有修复。 - IgorGanapolsky
5
我在3.1.2版本也遇到了同样的错误。 - Mauker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接