2015-11-10 3 views
2

У меня возникли проблемы с моей базой данных на Android.Добавить значение FK в существующую запись таблицы

Есть две таблицы. Первый 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)" + ")"; 

Ive добавил внешний ключ 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" + ")"; 

Теперь Ive получил эти две таблиц, но я не уверен, как добавить 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 и связать его со всеми записями которым у меня есть selectet. (Ive получил EditText и Button, которые я использую для ввода номера комнаты).

Я надеюсь, что вы поймете мою проблему.

+0

Чтобы добавить строку в таблицу, используйте [вставку()] (http://developer.android.com/reference/android/database /sqlite/SQLiteDatabase.html#insertOrThrow(java.lang.String,%20java.lang.String,%20android.content.ContentValues)). Чтобы изменить значение столбца в одной или нескольких строках, используйте [update()] (http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#update (java.lang.String,% 20android .content.ContentValues,% 20java.lang.String,% 20java.lang.String [])). –

+0

Я изменил метод 'insertRoomNr'. Но он все еще не работает. Я не уверен, как работает 'update'. 1. Я беру комнату String и помещаю ее в свой 'TABLE_ROOM'. Теперь у меня есть номер и номер ID в моем столе 2. Теперь я хочу проверить номер, который я написал в TABLE, чтобы добавить его в мой 'TABLE_LISTEELEMENT' Но как я могу это выполнить? Мой способ сохранить идентификатор в строке, похоже, не работает. – Rastaman

ответ

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

Я сделал это. Теперь я использую 2 метода. Первый, чтобы вставить новое имя комнаты, а второе - обновить идентификатор.

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; 
} 
Смежные вопросы