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 插入/选择问题的主要内容,如果未能解决你的问题,请参考以下文章