#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 раньше, на самом деле он не запускался первым и, возможно, в середине цикла вставки?
В моем коде отключена запись в отдельные потоки, и теперь все данные, похоже, находятся в базе данных.