Sqlite外键

时间:2015-09-30 15:27:29

标签: android database sqlite

我的数据库中有四个表,即车道轮胎错误车辆。当我将数据插入到桌面上的驱动器中时,我希望在表 tires drive_log 中引用驱动器ID 。当我尝试将一些数据添加到数据库中时, drive_log 保持为空,并且我输入的任何数字都有效,尽管 drive_over 中不存在。我在网上搜索解决方案,我读到外键必须打开,因为它们默认是关闭的。 我在 SQLiteOpenHelper类中添加了 onConfigure方法,当我尝试在 drive_log 中插入无效数据时,外键约束不会失败。当我尝试通过SQLite上的命令行检查它们是否已打开时,返回 PRAGMA foreign_key = 0; ,因此我猜测我的外键约束未启用。我的问题是,如何打开外键?

'%s(last_name)s, %(first_name)s'

1 个答案:

答案 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;(即:向表中添加列)。