将FK值添加到现有表条目

时间:2015-11-10 09:45:29

标签: android sqlite

我在Android上的数据库遇到了一些问题。

有两张桌子。第一个TABLE_LISTELEMENT处理一个元素需要的所有数据。

public static final String SQL_CREATE_LE =
        "create table " + TABLE_LISTELEMENT + "(" +
                COL_LEID + " integer primary key autoincrement, " +
                COL_PRODUCT + " text, " +
                COL_LABEL + " text, " +
                COL_SERIAL + " text, " +
                COL_MAC + " text, " +
                COL_DAAID + " text, " +
                COL_BILL + " text, " +
                COL_FK_RID + " REFERENCES room(rid)" + ")";

我添加了COL_FK_RID外键来引用我的第二个表(TABLE_ROOMS

public static final String SQL_CREATE_R =
        "create table " + TABLE_ROOM + "(" +
                COL_RID + " integer primary key autoincrement, " +
                COL_RNAME + " text" + ")";

现在我已经有了这两张桌子,但我不知道如何将FK添加到我的第一张桌子。

首先,我创建TABLE_LISTELEMENTS的元素并在ListView中显示它们。现在我想要获取所有ListView条目并添加一个房间。 因此,我选择了TABLE_ELEMENTS的所有条目:

public boolean insertRoomNr(String room){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor dbCursor;

    ContentValues contentValues = new ContentValues();

    contentValues.put("roomname", room);
    db.insert(TABLE_ROOM, null, contentValues);
    String RaumId ="";
    RaumId = db.rawQuery("SELECT rid FROM room WHERE "+ COL_RNAME + " = ?",new String[]{"null"}).toString();

    ContentValues contentValues2 = new ContentValues();

    contentValues.put("fkrid", RaumId);
    db.update(TABLE_LISTELEMENT, contentValues2 , " WHERE fkrid IS null", null);
    return true;
}

但是我现在怎样才能为TABLE_ROOMS添加一个房间,并将他与我选择的所有参赛作品联系起来。 (我有一个EditText和一个Button我用来输入房间号码。)

我希望你能理解我的问题。

2 个答案:

答案 0 :(得分:1)

您还可以使用以下内容:

public boolean setData(String data1, String data2) {

    SQLiteDatabase database = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();

    contentValues.put("data_example1", data1);
    contentValues.put("data_example2", data2);

    db.insert(TABLE_EXAMPLE, null, contentValues);

    return true;
}

答案 1 :(得分:0)

我做到了。现在我使用2种方法。第一个插入新的roomName,第二个更新ID。

public boolean insertRoomNr(String room){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();

    contentValues.put("roomname", room);
    db.insert(TABLE_ROOM, null, contentValues);
    Log.d("raumname", room);

    return true;
}

public boolean insertRoomId(String roomFromEditText){
    SQLiteDatabase db = this.getWritableDatabase();

    db.execSQL("UPDATE listelement SET fkrid = (SELECT rid FROM room WHERE roomname = '" + roomFromEditText + "')");

    return true;
}