#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()
Метод вернет его значение.
Если таблица содержит столбец типа INTEGER PRIMARY KEY, то этот столбец становится псевдонимом для ROWID. Затем вы можете получить доступ к ROWID, используя любое из четырех разных имен, исходные три имени, описанные выше, или имя, присвоенное столбцу ПЕРВИЧНОГО ключа INTEGER. Все эти имена являются псевдонимами друг для друга и одинаково хорошо работают в любом контексте.
И из документации Android:
public long insert (String table, String nullColumnHack, ContentValues values)
Возвращает идентификатор строки вновь вставленной строки или -1, если произошла ошибка.