sqlite 外键始终为空

jhdbpxl9  于 2023-08-06  发布在  SQLite
关注(0)|答案(1)|浏览(123)

我正在尝试创建表ItemGroupeItem。我希望ItemGroupe_ID作为Itam表中的外键。这个外键的值总是null。有没有人可以提供示例代码来实现这一点?
Item_Group表:

public static final String CREATE_TABLE_ITEM_GROUP = "CREATE TABLE " + RawColumnContract.RawColumnEntry.TABLE_NAMES[0] + " (" +
            RawColumnContract.RawColumnEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            RawColumnContract.RawColumnEntry.COLUMN_NAME_GROUP_ITEM[1] + " TEXT)";

字符串
项目表:

public static final String CREATE_TABLE_ITEM = "CREATE TABLE " + RawColumnContract.RawColumnEntry.TABLE_NAMES[1] + "(" +
        RawColumnContract.RawColumnEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
        RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[0] + " TEXT," +
        RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[1] + " TEXT," +
        RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[2] + " TEXT," +
        RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[3] + " TEXT," +
        RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[4] + " INTEGER," +
        " FOREIGN KEY ("+RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[4]+") REFERENCES " +
        RawColumnContract.RawColumnEntry.TABLE_NAMES[0] + "("+RawColumnContract.RawColumnEntry._ID+"));";


创建时:

@Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {

            sqLiteDatabase.execSQL(CREATE_TABLE_ITEM_GROUP);
            sqLiteDatabase.execSQL(CREATE_TABLE_ITEM);
        }


添加项目组(_G):

public boolean addOne(ItemGroup itemGroup) {

    openWD();
    ContentValues cv = new ContentValues();
    cv.put(RawColumnContract.RawColumnEntry.COLUMN_NAME_GROUP_ITEM[1], itemGroup.getItemGroup_Name());

    long insert = db.insert(RawColumnContract.RawColumnEntry.TABLE_NAMES[0], null, cv);
    return insert != -1;
}


添加项目:

public boolean addOne(Item item) {

    openWD();
    ContentValues cv = new ContentValues();
    cv.put(RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[0], item.getItem_name());
    cv.put(RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[1], item.getItem_SKU());
    cv.put(RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[2], item.getItem_brand());
    cv.put(RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[3], item.getItem_color());

    long insert = db.insert(RawColumnContract.RawColumnEntry.TABLE_NAMES[1], null, cv);
    return insert != -1;
}

blpfk2vs

blpfk2vs1#

看起来您的印象是SQLite会自动生成外键值。
也就是说,在插入Item时,您不提供相应列的值。更确切地说,您没有cv.put(cv.put(RawColumnContract.RawColumnEntry.COLUMNS_NAME_ITEM[4], ....;
您需要设置相关值(即上面的....)添加到相应的ItemGroupe父项。

相关问题