SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 应为“ON”
Posted
技术标签:
【中文标题】SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 应为“ON”【英文标题】:Android Studio flagging error in SQLite pragma command, <pragma value> expected, got 'ON' 【发布时间】:2018-04-13 22:13:12 【问题描述】:我认为这是切换到 android Studio 3.0 后出现的新错误。我收到一个 lint 语法错误:
<pragma value> expected, got 'ON'
我仅在以下两种方法中的第一种方法中出现此错误:
private static void setForeignKeyConstraintsEnabled(@NonNull SQLiteDatabase db)
if (!db.isReadOnly())
db.execSQL("PRAGMA foreign_keys=ON;");
private static void setForeignKeyConstraintsDisabled(@NonNull SQLiteDatabase db)
if (!db.isReadOnly())
db.execSQL("PRAGMA foreign_keys=OFF;");
我只找到了一个suggested fix on the internet as of writing。它是德文的,说我不应该对编译指示使用常量字符串,而应该使用字符串参数。
String query = String.format ("PRAGMA foreign_keys = %s","ON");
db.execSQL(query);
但我怀疑如果这消除了错误,它只是通过使代码过于复杂而无法检测到 lint 规则来实现。
为什么ON 会抛出错误而不是OFF?我的语法错了吗?
【问题讨论】:
我猜这是 Lint 规则中的一个错误。你可以试试alternative syntax(小写no
、0、括号而不是=
等)看看你能不能得到一些简单的东西并通过Lint。
@CommonsWare,谢谢,使用带符号的数字语法解决了这个错误
尽管对您当前删除的答案发表了评论,但您回答自己的问题是完全合理的。特别是,对于这种情况,我会建议你写下答案,因为你有工作代码。我投票取消删除你的答案,我建议你恢复它。
完成!感谢您的指导!
【参考方案1】:
使用有符号整数alternative syntax 有效。
private static void setForeignKeyConstraintsEnabled(@NonNull SQLiteDatabase db)
if (!db.isReadOnly())
db.execSQL("PRAGMA foreign_keys=1;");
private static void setForeignKeyConstraintsDisabled(@NonNull SQLiteDatabase db)
if (!db.isReadOnly())
db.execSQL("PRAGMA foreign_keys=0;");
有趣的是,使用 yes/no 的替代语法在 no 而不是 yes 上标记了错误。我同意@CommonsWare 的观点,这似乎是一个 lint 错误。
【讨论】:
不介意我说,但您应该让@CommonsWare 将其发布为答案,恕我直言,您应该通知他并要求他将其发布为答案,但这只是我的意见(将很快删除评论,如果你不喜欢请忽略) FWIW,我提交了a bug report。ON
、on
和 no
被标记为无效,而后两者被明确记录为正确。以上是关于SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 应为“ON”的主要内容,如果未能解决你的问题,请参考以下文章
如何在SQLite中添加自己的PRAGMA语句来存储自定义元数据?
不要通过 QSqlQuery 获得所有 sqlite pragma 的结果
Massive.Sqlite.cs -- 原型失败,因为没有 COLUMN_NAME;修复使用 PRAGMA table_info?