在Swift中如何在SQLite数据库上运行检查点

5q4ezhmt  于 2023-05-18  发布在  SQLite
关注(0)|答案(1)|浏览(115)

我有一个程序可以将CSV文件中的数据添加到核心数据中。一旦我将托管对象上下文保存到持久性存储中,我想运行一个检查点,将WAL文件的内容刷新到SQLite文件中。我已经在我的类中添加了代码,试图这样做,但无法确定在“sqlite3_wal_checkpoint(...)”行中将什么放入不安全的指针参数(用?????????????????????????????????????????????????????????????????????????????????????????????????????????????当然,如果有更好的方法,请告诉我。

class UpdateCoreDataTest: ObservableObject {
    @Published var isLoading: Bool = true
    var moc: NSManagedObjectContext
    init(moc: NSManagedObjectContext) {
        self.moc = moc
        Task {
            await IsDataStoreEmpty(moc: self.moc)
            let fund1 = CSVtoCoreData(fundName: "Fund1", fileName: "Fund1.csv")
            let fund2 = CSVtoCoreData(fundName: "Fund2", fileName: "Fund2.csv")
            let fund3 = CSVtoCoreData(fundName: "Fund3", fileName: "Fund3.csv")
            await fund1.CSVtoCoreDataG(moc: self.moc)
            await fund2.CSVtoCoreDataG(moc: self.moc)
            await fund3.CSVtoCoreDataG(moc: self.moc)
            do {
                try moc.save()
            } catch {
                print("Error saving. \(error)")
            }
//--- start of added code
            let fileURL = URL(fileURLWithPath: "/Users/Chris/Downloads/Persistent Store 2/Funds.sqlite")
            var dataBase: OpaquePointer?
            if sqlite3_open(fileURL.path, &dataBase) != SQLITE_OK {
                print("Unable to open sqlite file")
            } else {
                print("Succesfully opened sqlite file")
            }
//            sqlite3_wal_checkpoint(dataBase, ??????? )
            sqlite3_close(dataBase)
//--- end of added code
            DispatchQueue.main.async {
                self.isLoading = false
            }
        }
    } // end init
}
vxf3dgd4

vxf3dgd41#

从文档:
第二个参数是附加数据库的名称(或NULL)。如果参数为NULL或指向零长度字符串,则在附加到数据库连接db的所有WAL数据库上尝试指定的操作。
但是,当数据库文件上的最后一个数据库连接关闭并且WAL文件将被删除时,SQLite将自动检查点。因此,如果您需要打开数据库来执行检查点操作,那么可能根本没有什么可做的。

相关问题