Swift SQLITE3 插入/选择问题

Posted

技术标签:

【中文标题】Swift SQLITE3 插入/选择问题【英文标题】:Swift SQLITE3 Insertion / Selection Issue 【发布时间】:2015-04-02 17:58:24 【问题描述】:

我花了好几天的时间试图弄清楚为什么使用 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 

函数创建() 连接() let createSQL = "如果不存在艺术家则创建表 (id INTEGER PRIMARY KEY AUTOINCREMENT, title VARCHAR(100) NOT NULL, last_updated INTEGER, created INTEGER);" var errMsg:UnsafeMutablePointer = nil 如果 sqlite3_exec(数据库,createSQL,nil,nil,&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】:

尝试更改创建表设置。

将 VARCHAR(100) 替换为 TEXT ...不确定这是否可以解决问题,但值得一试。

【讨论】:

以上是关于Swift SQLITE3 插入/选择问题的主要内容,如果未能解决你的问题,请参考以下文章

插入sqlite3数据库

针对 20,000 多次更新优化 Sqlite3

将数据从对话框插入 SQLi 后自定义列表视图不刷新

如何使用 Swift 从 tableview 和 sqlite3 中删除

SQLite3 FTS3/FTS4 匹配信息示例

在 Swift 中为 macOS 构建框架时出错