【问题标题】:Referenced foreign key id is null when inserting new values in the second table. How do I simply select the id from the first table to the second?在第二个表中插入新值时,引用的外键 id 为空。如何简单地从第一个表中选择 id 到第二个表?
【发布时间】:2021-03-11 06:56:40
【问题描述】:

我在我的数据库管理器中创建了两个表

@Override
public void onConfigure(SQLiteDatabase db) {
    db.setForeignKeyConstraintsEnabled(true);
    super.onConfigure(db);
}

@Override
public void onCreate(SQLiteDatabase database)
{
    database.setForeignKeyConstraintsEnabled(true);
    // create table
    String sql = "create table "
                + TABLE_NAME + " ("
                + C_LIST_ID + " integer primary key autoincrement, "
                + C_LIST_NAME + " VARCHAR(255))";
    Log.d(TAG, "in onCreate");

    //create second table
    String sql2 = "create table "
                + TABLE_NAME_ITEMS + " ("
                + C_LIST_ITEM + " VARCHAR(255), "
                + C_DATE + " text, "
                + C_FLAG + " integer, "
                + C_LIST_NAME + " VARCHAR(255), "
                + C_ITEM_ID + " integer, foreign key "
                + "("+C_ITEM_ID+")" + " references " +TABLE_NAME+ "("+C_LIST_ID+"))";
    Log.d(TAG, "in onCreate second database");

    database.execSQL(sql);
    database.execSQL(sql2);
}

这就是我将数据插入第二个表的方式。在表本身中,外键 ID 为空。创建具有相同 C_LIST_NAME 的新项目时,如何将第一个表的 id 带到第二个表?

public void insertItemData(String item, String listName)
{
    Integer listNameId = getListId(listName);
    database = getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(C_LIST_ITEM, item + listNameId);
    contentValues.put(C_LIST_NAME, listName);
    database.insertOrThrow(TABLE_NAME_ITEMS, null , contentValues);
    Log.d(TAG, "insertData: data has been inserted in items");
}

【问题讨论】:

  • Sqlite 不是 mysql!
  • 我真正的意思是 SQLite 而不是 MySQL,这是一个深夜哎呀

标签: sqlite android-studio


【解决方案1】:

在尝试了几个小时之后,我应该在昨晚休息一下。 我想通了,解决方案非常简单。我只是太累了,无法猜测。

如果有人好奇,我只需要这样插入:

public void insertItemData(String item, String itemDescription, String listName)
{
    baseActivity = new BaseActivity();
    database = getWritableDatabase();
    database.execSQL("INSERT INTO "+TABLE_NAME_ITEMS+
                    "("+C_ITEM_NAME+"," +C_ITEM_DESCRIPTION+ ", " +C_LIST_NAME+ "," +C_DATE+ "," +C_FLAG+ "," +C_ITEM_ID+ ")"
                    + "VALUES ('"+item+ "', '"+itemDescription+ "', '" +listName+ "', '" +baseActivity.getCurTime()+ "', '" +0+ "', "
                    + "(SELECT " +C_LIST_ID+ " FROM " +TABLE_NAME+ " WHERE "
                    +C_LIST_NAME+ "=?))",
            new Object[]{listName});
    Log.d(TAG, "insertData: data has been inserted in items");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多