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