如何解决 Sqlite.swift 中的警告消息 'BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation'?

How can i resolve warning message 'BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation' in Sqlite.swift?

我正在使用 Sqlite.swift

当我在模拟器中重新启动应用程序时,我想删除现有数据库并创建新数据库。 (因为正在初始化数据库...我更改了很多数据库列。)

但是有警告信息。

[logging] BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation: vnode unlinked while in use:

我知道这与诚信有关...但我不知道如何解决这个问题。

这是我的代码。当您单击按钮 'Create' 时,func createDB() 将起作用。

    func createDB() {
        print("CREATE DB")
        do {

            let documentDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)

            let fileUrl = documentDirectory.appendingPathExtension("test").appendingPathExtension("sqlite3")

            // if there is existing db, then remove it
            let fileMng = FileManager.default
            if fileMng.fileExists(atPath: fileUrl.path) {
                do {
                    try fileMng.removeItem(at: fileUrl)
                    print("remove db file because you already have db")
                }
                catch {
                    print("Remove DB Error", error)
                }
            }

            let database = try Connection(fileUrl.path)
            self.database = database
            print("Successfully create database")
        }
        catch {
            print("Create DB Error : ", error)
        }
    }

这是日志。

CREATE DB
remove db file because you already have db
Successfully create database
CREATE DB
remove db file because you already have db
2020-04-13 23:01:36.866156+0900 RealmTest[40604:6719249] [logging] BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation: vnode unlinked while in use: {directory-address-in-my-local-computer}
2020-04-13 23:01:36.866272+0900 RealmTest[40604:6719249] [logging] invalidated open fd: 5 (0x11)
Successfully create database

我发现这不是错误,而是警告。当我重新启动应用程序时,删除操作工作得很好,没有警告消息。但是当我第二次单击按钮 'Create' 时,警告消息提醒。

我关闭应用程序时没有删除数据库。因此,我认为很明显,当应用程序再次打开时,数据库将被删除。所以我不知道两次创建数据库有什么问题。如果你能告诉我,我将不胜感激!请告诉我。

您需要确保在调用 createDB() 方法之前,已关闭与数据库的任何挂起连接。您的代码中至少有一个这样的连接,在 self.database 中,因此您需要将其设置为 nil。

self.database = nil
self.createDB()

(或者,你可以在 createDB() 里面)

我没有更好的解决方案,但值得一提的是,当我尝试在 [=13] 的 Google Drive 文件夹中删除并重新创建数据库时,我遇到了同样的错误=],但当我使用本地文件夹(例如我的主目录)时不会。