我正在尝试将大约10000个数据插入到我的数据库中。检查下面的代码功能。插入所有数据大约需要一分钟。现在我已经在事务中添加了块,但是我需要提交它还是自动管理它。如何在下面的代码中编写它?
func insertDataToDB(objects: [DataModel]) {
removeAllData()
createSchemaForData()
print("Start Inserting Connectors \(Date())")
let stmt = try? db.prepare("INSERT INTO product (connectorId, deviceId, current, status, cost, voltage, power, type, method, mode) VALUES (?,?,?,?,?,?,?,?,?,?)")
do {
try db.transaction {
for product in objects {
try stmt?.run(product.connectorId!, product.deviceId!, product.current, product.status, product.cost, product.voltage, product.power, product.type!, product.method!, product.mode)
}
}
} catch {
print("Failed Inserting connectors: \(error.localizedDescription)")
}
print("End Inserting Connectors \(Date())")
}
removeAllData()
在插入之前将从db中删除所有数据。
createSchemaForData()
如果需要,将创建架构。
struct product {
static let table = Table("product")
static let connectorId = Expression<String>("connectorId")
static let deviceId = Expression<String>("deviceId")
static let current = Expression<Double?>("current")
static let status = Expression<String?>("status")
static let cost = Expression<Double?>("cost")
static let voltage = Expression<Double?>("voltage")
static let power = Expression<Double?>("power")
static let type = Expression<String?>("type")
static let method = Expression<String?>("method")
static let mode = Expression<String?>("mode")
}
答案 0 :(得分:0)
上面的代码没有问题,但我做错了是我创建的单例类。
我正在使用下面的连接,每次访问db
对象时都会给我新的连接。
var db: Connection {
let dbPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
return try! Connection("\(dbPath)/\(dbName)")
}
因此改进了代码,以便在详细信息中查看Rob的代码。所以现在插入数据的时间甚至不到一秒钟。
let db: Connection = {
let path = NSSearchPathForDirectoriesInDomains(
.documentDirectory, .userDomainMask, true
).first!
return try! Connection("\(path)/EVDataBase.sqlite")
}()
如果上面的代码仍有改进,请告诉我。或者,如果任何人都可以分享他们的单身人士或经理人课程也会有所帮助。