我的数据库中有四个表,即车道,轮胎,错误和车辆。当我将数据插入到桌面上的驱动器中时,我希望在表 tires drive_log 中引用驱动器ID 。当我尝试将一些数据添加到数据库中时, drive_log 保持为空,并且我输入的任何数字都有效,尽管 drive_over 中不存在。我在网上搜索解决方案,我读到外键必须打开,因为它们默认是关闭的。 我在 SQLiteOpenHelper类中添加了 onConfigure方法,当我尝试在 drive_log 中插入无效数据时,外键约束不会失败。当我尝试通过SQLite上的命令行检查它们是否已打开时,返回 PRAGMA foreign_key = 0; ,因此我猜测我的外键约束未启用。我的问题是,如何打开外键?
'%s(last_name)s, %(first_name)s'
答案 0 :(得分:0)
您在每个DROP TABLE语句后都错过了一个空格 这不允许删除现有表格,并且表格不会被重新创建。
此
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
if(oldVersion != newVersion){
db.execSQL("DROP TABLE IF EXISTS" + TABLE_DRIVE_OVER);
db.execSQL("DROP TABLE IF EXISTS" + TABLE_VECHILES);
db.execSQL("DROP TABLE IF EXISTS" + TABLE_TYRES);
db.execSQL("DROP TABLE IF EXISTS" + TABLE_ERRORS);
onCreate(db);
}
}
应该是
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
if(oldVersion != newVersion){
db.execSQL("DROP TABLE IF EXISTS " + TABLE_DRIVE_OVER);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_VECHILES);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_TYRES);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ERRORS);
onCreate(db);
}
}
此外,在发布的代码中,还有一个缺少结束括号(} ),这是关闭包含的类所必需的。
请注意,每次对数据库进行结构更改时,都必须增加public static final int DATABASE_VERSION = 1;
(即:向表中添加列)。