sqlite: искать или заменить - PullRequest
1 голос
/ 24 января 2011

Я хотел бы использовать sqlite (используя Java JDBC, не уверен, что это имеет значение), чтобы добавить или заменить новую строку в базе данных, и вернуть автоматически сгенерированный идентификатор строки, и я не уверен, как это сделать эффективно / чисто.

определение таблицы имеет> = 3 столбца:

  • автоматически сгенерированное целое число ID
  • строка уникального ключа (назовем ее key)
  • другие метаданные

Я могу думать о двух общих подходах:

  1. SELECT ID FROM myTable WHERE key = ?
  2. Если совпадений нет, ВСТАВЬТЕ новую строку и повторите шаг # 1, чтобы получить автоматически сгенерированный идентификатор

или

  1. INSERT OR REPLACE INTO myTable (key, metadata) VALUES (?, ?)
  2. SELECT ID FROM myTable WHERE key = ?

Что мне делать? Не уверен, что любой подход является атомарной транзакцией. (ну, во-первых, не уверен насчет второго)


edit: Я только что попробовал подход INSERT OR REPLACE, и он «работает», за исключением того, что он также заменяет ID на новый, а это не то, чего я хочу. Я хочу сохранить существующий идентификатор.

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Используя PreparedStatement, вы можете вернуть сгенерированный ключ для вставки, поэтому нет необходимости запускать оператор выбора после вставки только для того, чтобы получить ключ.

Для этого:

  • Когда вы готовите оператор, используйте метод, который позволяет вам указать, что он возвращает сгенерированные ключи.
  • После запуска вызова update «getGeneratedKeys ()» для объекта оператора.
1 голос
/ 24 января 2011

Существует функция SQLITE для получения последнего вставленного автоматического идентификатора

SELECT last_insert_rowid()

Не уверен, работает ли он для обновлений, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...