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

时间:2017-11-01 14:44:47

标签: 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 ?我的语法错了吗?

1 个答案:

答案 0 :(得分:6)

使用带符号的整数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 上标记了错误,但。我同意@CommonsWare,这似乎是一个lint bug。