вставка данных в 2 таблицы с одинаковым сгенерированным уникальным идентификатором с помощью Android sqlite

#android #sqlite

#Android #sqlite

Вопрос:

Я пытаюсь вставить данные в две таблицы с уникальным идентификатором, генерируемым в Table1, и использовать сгенерированный уникальный идентификатор в Table2.

Пример: Я хочу вставить empl_no и empl_name в таблицу 1 и таблицу 2. После вставки empl_no в Table1 он автоматически сгенерирует идентификатор для этой строки. Этот идентификатор необходимо будет использовать в Table2 для вставки empl_name.

 Table 1
empl_id | empl_no
-----------------
1       | e00001

Table 2
empl_id | empl_name
-------------------
1       | Andy
  

Что я имею в виду, так это вставить empl_no в Table1, чтобы затем выполнить select , чтобы получить последнюю строку для извлечения empl_id. Затем используйте empl_id для вставки в Table2.

Есть ли лучший способ сделать это? Это выглядит неэффективно, потому что каждый раз для вставки данных нужно будет select из таблицы просто получать сгенерированный уникальный идентификатор.

Ответ №1:

Если вы определяете empl_id as INTEGER PRIMARY KEY в Table1 (необязательно с AUTOINCREMENT , но лучше не использовать его, если вам это явно не нужно), то вам не понадобится дополнительная инструкция SELECT . insert() Метод вернет его значение.

Из документации SQLite:

Если таблица содержит столбец типа INTEGER PRIMARY KEY, то этот столбец становится псевдонимом для ROWID. Затем вы можете получить доступ к ROWID, используя любое из четырех разных имен, исходные три имени, описанные выше, или имя, присвоенное столбцу ПЕРВИЧНОГО ключа INTEGER. Все эти имена являются псевдонимами друг для друга и одинаково хорошо работают в любом контексте.

И из документации Android:

public long insert (String table, String nullColumnHack, ContentValues values) Возвращает идентификатор строки вновь вставленной строки или -1, если произошла ошибка.