我认为这是切换到 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?我的语法错了吗?
最佳答案
使用有符号整数 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/