我正在为数据库使用SQLlite3,并且尝试使用“ select * table where * =?”在Swift中使用Sqlite3,但是我被卡在这里使用的方法的地方,但是我没有从方法中得到任何响应。
func DoesExist(titles: String?){
ArticleList.removeAll()
let queryStrings = "SELECT * FROM articles WHERE title = ? "
var stmt3:OpaquePointer?
if sqlite3_prepare(db, queryStrings, -1, &stmt3, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing Select: \(errmsg)")
return
}
if sqlite3_bind_text(stmt3, 1, titles, -1, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure binding title: \(errmsg)")
return
}
while(sqlite3_step(stmt3) == SQLITE_ROW){
let id = sqlite3_column_int(stmt3, 0)
let author = String(cString: sqlite3_column_text(stmt3, 1))
let title = sqlite3_column_int(stmt3, 2)
//adding values to list
ArticleList.append(Article(id: Int(id), author: String(describing: author), title: String(describing: title)))
print(ArticleList.count)
}
}
我不知道这是否有帮助,但是当我尝试打印sqlite3_step(stmt3)时,我得到了101 我没有弄错我做错了什么,所以如果有人熟悉此错误帮助,请吗?
***** UPDATE *****
我添加了
if sqlite3_step(stmt3) != SQLITE_DONE {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure inserting foo: \(errmsg)")
}
print("---------------------\(sqlite3_step(stmt3))")
而不是101,我得到21,这意味着:内存不足
答案 0 :(得分:1)
(公认的误导性)“内存不足”错误是SQLite所说的db
指针为nil
的一种说法。在db
调用之前打印/测试sqlite3_xxx
,该错误使您出现“内存不足”错误,并且您会发现确实是nil
。如果您确信以前打开过数据库,则必须具有将其重置为nil
的执行路径,或者可能有多个db
浮动引用(例如,一些本地var和ivar)。
您可以在方法的开始处添加此测试,该测试的开始precondition
必须已经打开数据库:
precondition(db != nil, "Database not open")