【问题标题】:Android Studio flagging error in SQLite pragma command, <pragma value> expected, got 'ON'SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 应为“ON”
【发布时间】:2018-04-13 22:13:12
【问题描述】:

我认为这是切换到 Android Studio 3.0 后出现的新错误。我收到一个 lint 语法错误:

&lt;pragma value&gt; 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,谢谢,使用带符号的数字语法解决了这个错误
  • 尽管对您当前删除的答案发表了评论,但您回答自己的问题是完全合理的。特别是,对于这种情况,我会建议你写下答案,因为你有工作代码。我投票取消删除你的答案,我建议你恢复它。
  • 完成!感谢您的指导!

标签: android sqlite android-studio android-studio-3.0


【解决方案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 reportONonno 被标记为无效,而后两者被明确记录为正确。
猜你喜欢
  • 2014-06-29
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2022-01-02
  • 2012-04-15
  • 2014-04-29
相关资源
最近更新 更多