IOS,SQLite实施问题
尽管在建立连接后尝试立即打开外键,即使该查询的结果没有产生错误,我的后续检查也显示外键未启用。
我无法弄清楚原因。这是代码:
var sqliteDB: COpaquePointer = nil
let dbPath = (documentsPath as NSString).stringByAppendingPathComponent("test.sqlite3")
let status = sqlite3_open(dbPath.cStringUsingEncoding(NSUTF8StringEncoding)!, &sqliteDB)
if status != SQLITE_OK {
print("Error Opening Database")
if let errMsg = String.fromCString(sqlite3_errmsg(sqliteDB)) {
print("\(errMsg)")
}
}
if sqlite3_exec(sqliteDB, "PRAGMA foreign_keys = ON", nil, nil, nil) != SQLITE_OK {
let err = String.fromCString(sqlite3_errmsg(sqliteDB))
print("error attempting to enable foreign keys: \(err)")
}
let test = sqlite3_exec(sqliteDB, "PRAGMA foreign_keys", nil, nil, nil)
print("Result of check: \(test)") // Result of check: 0
在上面的代码中,'test'始终为零,表示未启用外键。我也尝试过使用sqlite3_prepare_v2。
非常感谢任何帮助。
答案 0 :(得分:2)
当您测试“PRAGMA foreign_keys”时,您需要加载一个实际行,该行包含您要查找的布尔值。 sqlite3_exec不是加载行的正确方法:它专门用于轻松执行一堆SQL语句,而不是加载行。
以下是检查方法:
<ul>
<li>
type
<select>
<option>type1</option>
<option>type2</option>
</select>
</li>
</ul>
<p></p>
顺便说一句,您也可以使用现成的SQLite包装器,例如https://github.com/groue/GRDB.swift