Swift SQLITE3插入/选择问题

时间:2015-04-02 17:58:25

标签: mysql xcode string swift sqlite

我花了好几天试图弄清楚为什么使用Swift的slqlite3要么插入一个字符串,最后一个字符丢失,要么只是一起清空。在线研究也证明了自己的失败;我无法理解遵循以下标准程序:

  • 打开与数据库的连接。
  • 准备声明&绑定变量。
  • 执行声明&敲定它。
  • 关闭与数据库的连接。

注意:这是根据Apress'用Swift书开始iPhone开发。

有没有人知道为什么没有正确插入字符串(或者在选择期间出现问题?)?任何帮助将不胜感激。

我的申请中使用的代码如下:

假设已创建必要的变量。

var database:COpaquePointer = nil
var result: Int32 = Int32()


    func create () {
    connect()
    let createSQL = "CREATE TABLE IF NOT EXISTS artists (id INTEGER PRIMARY KEY AUTOINCREMENT, title VARCHAR(100) NOT NULL, last_updated INTEGER, created INTEGER);"
    var errMsg:UnsafeMutablePointer<Int8> = nil
    if sqlite3_exec(database, createSQL, nil, nil, &errMsg) != SQLITE_OK { println(errMsg) }
    disconnect()
}

func connect () -> Bool { println("Connected to the db."); return sqlite3_open(path, &database) == SQLITE_OK }

func create(){         连接()         让createSQL =&#34; CREATE TABLE IF NOT EXISTS artist(id INTEGER PRIMARY KEY AUTOINCREMENT,title VARCHAR(100)NOT NULL,last_updated INTEGER,created INTEGER);&#34;         var errMsg:UnsafeMutablePointer = nil         如果sqlite3_exec(database,createSQL,nil,nil,&amp; errMsg)!= SQLITE_OK {println(errMsg)}         断开()     }

func addArtist (title: String) -> Int32 {
    connect()
    var newItemId: Int32 = 0
    let query = "INSERT INTO artists (title, last_updated, created) VALUES (?, ?, ?);"
    var statement:COpaquePointer = nil
    if sqlite3_prepare_v2(database, query, -1, &statement, nil) == SQLITE_OK {
        sqlite3_bind_text(statement, 1, title, -1, nil)
        sqlite3_bind_int(statement, 2, 0)
        sqlite3_bind_int(statement, 3, Int32(NSDate().timeIntervalSince1970))
    }
    if sqlite3_step(statement) == SQLITE_DONE { newItemId = Int32(sqlite3_last_insert_rowid(database)) }
    sqlite3_finalize(statement)
    disconnect()
    return newItemId
}

1 个答案:

答案 0 :(得分:0)

尝试更改创建表设置。

将 VARCHAR(100) 替换为 TEXT ... 不确定这是否正在修复它,但值得一试。