параллелизм с базой данных h2 - PullRequest
1 голос
/ 03 февраля 2012

У меня есть таблица xxx с идентификатором (id_xxx int AUTO_INCREMENT) и именем (name_xxx varchar (50)), Когда я вставляю новую строку в таблицу, я сделал:

INSERT INTO xxx VALUES ​​("name for test");

и результат (int = 1) вставки возвращается, затем я отображаю в своем интерфейсе Java сообщение «succseed!», До сих пор это очень простая и простая операция ... НО, когда я хочу вернуть вставленный id_xxx, я должен сделать еще один запрос к базе данных:

INSERT INTO xxx VALUES ​​("name for test");
//after the insert response I made:
SELECT MAX (id_xxx) FROM xxx;

и я отображаю в своем интерфейсе Java "succseed $$$ is your id_xxx" ....

вторая версия может легко вызвать серьезную ошибку при одновременном доступе нескольких пользователей: представьте себе случай, когда user1 делает вставку ... и затем операции прерывания H2DB этого пользователя затем выполняют вставку user2. когда user1 выполняет select max (id_xxx), H2DB возвращает A FALSE id_xxx ...

(Я надеюсь, что мой пример понятен, иначе я схематизирую эту проблему).

как решить эту проблему?

1 Ответ

1 голос
/ 03 февраля 2012

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

...