我目前正在尝试将我的iOS应用程序与本地计算机上的SQLite数据库连接,虽然我找到了一系列有效的代码,但我想了解它们是如何工作的。
以下内容来自帖子
使用sqlite3_exec执行SQL(例如create table)。
if sqlite3_exec(db, "create table if not exists test (id integer primary key autoincrement, name text)", nil, nil, nil) != SQLITE_OK {
let errmsg = String.fromCString(sqlite3_errmsg(db))
print("error creating table: \(errmsg)")
}
我理解if语句,但为什么参数中有3个nils,sqlite3_exec来自哪里?我导入sqlite3.dylib时是否与C捆绑在一起? 据我所知,下一行将errmsg定义为一个字符串,显示sqlite3返回的错误消息以及数据库名称。
var statement: COpaquePointer = nil
if sqlite3_prepare_v2(db, "insert into test (name) values (?)", -1, &statement, nil) != SQLITE_OK {
let errmsg = String.fromCString(sqlite3_errmsg(db))
print("error preparing insert: \(errmsg)")
}
if sqlite3_bind_text(statement, 1, "foo", -1, SQLITE_TRANSIENT) != SQLITE_OK {
let errmsg = String.fromCString(sqlite3_errmsg(db))
print("failure binding foo: \(errmsg)")
}
if sqlite3_step(statement) != SQLITE_DONE {
let errmsg = String.fromCString(sqlite3_errmsg(db))
print("failure inserting foo: \(errmsg)")
}
以上也为我提出了一些问题。 什么是COpaquePointer?它只是一个指针吗?
关于第一个陈述(db, "insert into test (name) values (?)", -1, &statement, nil)
的参数的相同问题,为什么还有-1
或nil
?
SQLite返回SQLITE_OK
吗?