SQL Lite теряет записи в базе данных

#java #sqlite

#java #sqlite

Вопрос:

У меня есть некоторый Java-код, над которым я работаю, и я столкнулся со странной проблемой.

У меня есть одна главная таблица, которая использует rowid в качестве первичного ключа и содержит запись. Эта запись вставляется, затем обновляется по мере необходимости. Все это работает нормально.

У меня есть три другие таблицы, в которых хранятся данные, относящиеся к первой таблице, на которые ссылается идентификатор строки в первой таблице.

Моя проблема в том, что когда приходит время обновлять данные в других таблицах, я обычно удаляю все записи, связанные с основным идентификатором, а затем повторно вставляю их.

Однако, похоже, что это не всегда вставляет записи? несмотря на то, что данные определенно отправляются в драйвер sqlite. Проблема также не последовательна, иногда она добавляет все записи в цикле, в других случаях она добавляет две, и, наконец, в других случаях она не добавляет ни одной.. Связано ли это с тем, что я удаляю записи, а затем повторно вставляю их? (на самом деле не имеет смысла)… или что-то совсем другое?

Учитывая следующий запрос:

 16.03 21:32:43 [Server] INFO [Database] Query Was: DELETE FROM faction_members WHERE faction_id='1'; 
16.03 21:32:43 [Server] INFO [Database] Query Was: INSERT INTO faction_members VALUES('1','0f448831-477e-3e62-87aa-bbbdbb2d28ed','0');
  

Затем вторая таблица данных:

 16.03 21:32:43 [Server] INFO [Database] Query Was: DELETE FROM faction_ranks WHERE faction_id='1'; 
16.03 21:32:43 [Server] INFO [Database] Query Was: INSERT INTO faction_ranks VALUES('1','0','Leader'); 
16.03 21:32:43 [Server] INFO [Database] Query Was: INSERT INTO faction_ranks VALUES('1','1','General'); 
16.03 21:32:43 [Server] INFO [Database] Query Was: INSERT INTO faction_ranks VALUES('1','2','Officer'); 
16.03 21:32:43 [Server] INFO [Database] Query Was: INSERT INTO faction_ranks VALUES('1','3','Member'); 
16.03 21:32:43 [Server] INFO [Database] Query Was: INSERT INTO faction_ranks VALUES('1','4','Recruit');
  

Результат, который записывается в базу данных, является:

 sqlite> select * from faction_members; <-no results
sqlite> select * from faction_ranks;
1|0|Leader
1|1|General
1|2|Officer
sqlite>
  

Есть предположения? Кажется, я не сталкиваюсь с этой проблемой, используя подход вставки / обновления, но когда я удаляю записи, а затем вставляю новые строки, они ненадежно попадают в таблицу.

Сообщения об ошибках отсутствуют

Ответ №1:

Хммммм… Возможно, я только что понял это.

Удаление / вставка выполнялись в другом потоке, поэтому я полагаю, что вполне возможно, что, хотя я вызывал delete раньше, на самом деле он не запускался первым и, возможно, в середине цикла вставки?

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