Swift - SQLite连接代码说明

时间:2016-08-19 09:28:24

标签: c swift parameters sqlite

我目前正在尝试将我的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)的参数的相同问题,为什么还有-1nil

SQLite返回SQLITE_OK吗?

0 个答案:

没有答案