Я хотел бы использовать sqlite (используя Java JDBC, не уверен, что это имеет значение), чтобы добавить или заменить новую строку в базе данных, и вернуть автоматически сгенерированный идентификатор строки, и я не уверен, как это сделать эффективно / чисто.
определение таблицы имеет> = 3 столбца:
- автоматически сгенерированное целое число
ID
- строка уникального ключа (назовем ее
key
)
- другие метаданные
Я могу думать о двух общих подходах:
SELECT ID FROM myTable WHERE key = ?
- Если совпадений нет, ВСТАВЬТЕ новую строку и повторите шаг # 1, чтобы получить автоматически сгенерированный идентификатор
или
INSERT OR REPLACE INTO myTable (key, metadata) VALUES (?, ?)
SELECT ID FROM myTable WHERE key = ?
Что мне делать? Не уверен, что любой подход является атомарной транзакцией. (ну, во-первых, не уверен насчет второго)
edit: Я только что попробовал подход INSERT OR REPLACE, и он «работает», за исключением того, что он также заменяет ID на новый, а это не то, чего я хочу. Я хочу сохранить существующий идентификатор.