SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 预期,得到 'ON'

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

我认为这是切换到 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;");
    }
}

screenshot of editor text with underlined error

我只找到一个suggested fix on the internet as of writing .它是德语的,说我不应该为 pragma 使用常量字符串,而应该使用字符串参数。

String query = String.format ("PRAGMA foreign_keys = %s","ON"); 
db.execSQL(query); 

但我怀疑如果这消除了错误,它只是通过使代码太复杂以至于 lint 规则无法检测来实现。

为什么 ON 会抛出错误而不是 OFF?我的语法错了吗?

最佳答案

使用有符号整数 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 错误。

关于SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 预期,得到 'ON',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47057487/

相关文章:

java - 删除文件中的一行 (Android/java)

android - Android 的 Sqlite 语法错误

android - 更新后的 Gradle 错误 : com. android.tools:sdk-common

Android Studio 渲染 fragment 问题

java - 如何在 Java 中调整数组大小?

Android GPS list 不起作用

Android 从 WCF Rest 服务获取图像

android - 如何在纵向/横向变化中旋转 imageView

sql - 通过平均减少sql表中的数据?

android - 使用 SQLite 将数据从一个 Activity 传输到另一 Activity : Android Studio