我认为这是自切换到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。它是德语,并说我不应该为pragma使用常量字符串,但应该使用字符串参数。
String query = String.format ("PRAGMA foreign_keys = %s","ON");
db.execSQL(query);
但我怀疑如果这样可以消除错误,它只会使代码过于复杂而无法检测到lint规则。
为什么 ON 会抛出错误而不是 OFF ?我的语法错了吗?
答案 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。