Таблица базы данных sqlite.swift заблокирована (код: 6)

Я пытаюсь создать проект, который будет синхронизировать данные из онлайн-базы данных.

У меня есть 4 файла, чтобы позаботиться обо всем процессе:

  1. dbConnection.swift
  2. createTables.swift
  3. dropAllTables.swift
  4. updateDatabase.swift

У меня возникла проблема при попытке удалить таблицы.

Например, у меня есть таблица с именем FLEET_GROUPINGS_FOR_IPAD_SYSTEM в функции createTables.swift.

Следующий код (в отдельной функции в dropAllTables.swift):

let table = Table("FLEET_GROUPINGS_FOR_IPAD_SYSTEM")
try db.run(table.drop())

выдает эту ошибку:

database table is locked (code: 6)

person Robbie Cronin    schedule 19.12.2017    source источник


Ответы (2)


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

DispatchQueue.global(qos: .background).sync 
           {
             try db.run(table.drop())
           }
person Sarwesh reddy    schedule 19.12.2017
comment
Это почти сделало это, хотя я все еще получал ту же проблему. Исправление состояло в том, чтобы вручную закрывать базу данных после каждой операции, назначая db пустому соединению: db = Connection() - person Robbie Cronin; 26.02.2018

Это, наконец, сработало для меня, закрывайте соединение вручную после каждой операции чтения/записи: db = Connection(). Это беспорядочное решение, так как sqlite.swift предназначался для автоматического закрытия своих соединений, но у меня возникла эта проблема, потому что я определял свое соединение как отдельную функцию. Я бы не рекомендовал этого, лучше всего определять соединения в начале каждого файла, когда они необходимы.

person Robbie Cronin    schedule 26.02.2018