如何解决FMDB插入或替换做多个条目
我有一个sqlite3表,每次运行代码时,它都会添加多个条目。如何更改此查询以仅添加一个条目?
CREATE TABLE "GroupTable" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"memberId" TEXT NOT NULL,"adminId" TEXT NOT NULL,"name" TEXT NOT NULL
);
func addDatatoList(info: ListModel ) -> Bool
{
sharedInstance.database!.open()
let isInserted = sharedInstance.database!.executeUpdate("INSERT or REPLACE INTO GroupTable(adminId,memberId,name) VALUES (?,?,?)",withArgumentsIn: [ info.adminId,info. memberId,info.name])
sharedInstance.database!.close()
return isInserted
}
解决方法
您没有提供id
值,因此INSERT OR REPLACE
将永远不会替换。理论上,您可以添加id
参数,如果NSNull()
的值为NULL,则传递id
func addDatatoList(info: ListModel) -> Bool {
guard let db = sharedInstance.database else { return false }
db.open()
defer { db.close() }
let sql = "INSERT or REPLACE INTO GroupTable(id,adminId,memberId,name) VALUES (?,?,?)"
let values: [Any] = [info.id ?? NSNull(),info.adminId,info.memberId,info.name]
let isInserted = sharedInstance.database!.executeUpdate(sql,withArgumentsIn: values)
return isInserted
}
话虽如此,如果您做了INSERT
,则可能要检索该行的自动增量ID值:
func addDatatoList(info: ListModel) -> Bool {
guard let db = sharedInstance.database else { return false }
db.open()
defer { db.close() }
let sql = "INSERT or REPLACE INTO GroupTable(id,withArgumentsIn: values)
if isInserted,info.id == nil {
let id = db.lastInsertRowId
// e.g.,if `ListModel` is a reference type and `id` is mutable,// you might update the value,e.g.
info.id = Int(id)
}
return isInserted
}
但是,再说一次,如果您现在以编程方式确定是插入还是更新,则可能还有两个SQL语句,一个用于INSERT
,一个用于UPDATE
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。