gpt4 book ai didi

iOS Swift Sqlite UNIQUE 约束失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:41 24 4
gpt4 key购买 nike

这是在我的第一个 View Controller 中,它创建了一个名为 event 的表并尝试插入一行。

我删除我的应用程序并安装。然后我跑..

然后我的日志说:

失败:UNIQUE 约束失败:event.eid: INSERT INTO event (eid,passcode) VALUES (1,0);

表中没有任何内容,它是空的。为什么它说我的唯一约束(主键)失败?

即使抛出错误,它也会插入该行?

非常感谢您的帮助!

 ///////////////////////////
//creating event table
if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS event (eid INTEGER PRIMARY KEY,
eventid INTEGER NOT NULL DEFAULT 0, passcode TEXT NOT NULL DEFAULT '',
lastTicket INTEGER NOT NULL DEFAULT 0, online INTEGER NOT NULL DEFAULT 0,
onsale INTEGER NOT NULL DEFAULT 0, lastscanned INTEGER NOT NULL DEFAULT 0,
wasOffline INTEGER NOT NULL DEFAULT 0, eventOver TEXT NOT NULL DEFAULT '',
avatar INTEGER NOT NULL DEFAULT 0, devID TEXT NOT NULL DEFAULT '',
localScans INTEGER NOT NULL DEFAULT 0)", nil, nil, nil) != SQLITE_OK {


let errmsg = String(cString: sqlite3_errmsg(db)!)
log.error("error creating table: \(errmsg)")
}

var sqlString = "SELECT * FROM event WHERE eid=1"
if(getCount(sqlString:sqlString)==0) {

let sqlInserString = "INSERT INTO event (eid,passcode) VALUES (1,0);"
log.verbose(runSQL(sqlString:sqlInserString))

}///if eid!



func runSQL(sqlString:String) -> (String) {
var sqlMessage = ""
var sqlPointer: OpaquePointer? = nil

if sqlite3_prepare_v2(db, sqlString, -1, &sqlPointer, nil) == SQLITE_OK {
if sqlite3_step(sqlPointer) == SQLITE_DONE {
sqlMessage = "Success: " + sqlString
} else {
let errmsg = String(cString: sqlite3_errmsg(db)!)
sqlMessage = "Failure: \(errmsg): " + sqlString
}
} else {
let errmsg = String(cString: sqlite3_errmsg(db)!)
sqlMessage = "Not prepared: \(errmsg): " + sqlString
}
sqlite3_finalize(sqlPointer)

return(sqlMessage)

最佳答案

eid 被定义为 eid INTEGER PRIMARY KEY,是一种特殊情况。该列将是 rowid 的别名,它具有隐含的 UNIQUE 约束,因为它旨在唯一标识一行。

通常您不会在插入行时分配值,而是让 SQLite 分配值。

您的插入内容应该是:-

let sqlInserString = "INSERT INTO event (eid,passcode) VALUES (NULL,0);"

或:-

let sqlInserString = "INSERT INTO event (passcode) VALUES (0);"

eid 将作为整数作为唯一标识符,最初为 1,然后可能为 2、3 等(请注意,不能保证它会大于 1 或什至更大(尽管在使用最高可能的 id 9223372036854775807) 之前它会更大);因此,您应该只假设该值将是一个唯一的整数)。

关于iOS Swift Sqlite UNIQUE 约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48818466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com