快速保存sqlite数据库 [英] Saving sqlite database with swift
本文介绍了快速保存sqlite数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
完成本教程后
http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_8_Application_using_Swift_and_FMDB
我发现数据库仅在应用程序运行时创建.第二次运行应用程序时,我该如何访问数据库.我的最终目标是创建一个数据库并使用数据来显示事物.
I found that the database was only created while the app was running. How could I access the database the second time I run the app. And my final goal is to create a database and use the data to display things.
推荐答案
我使用以下简单包装程序:
I use the following simple wrapper:
private let _SingletonSharedInstance = SQLite()
class SQLite {
private var db: COpaquePointer = nil
private let path = "<path to your db>.rdb"
private var statement: COpaquePointer = nil
private let SQLITE_STATIC = sqlite3_destructor_type(COpaquePointer(bitPattern: 0)) // http://stackoverflow.com/a/26884081/1271826
private let SQLITE_TRANSIENT = sqlite3_destructor_type(COpaquePointer(bitPattern: -1))
class var sharedInstance : SQLite {
return _SingletonSharedInstance
}
init() {
if sqlite3_open(path, &db) != SQLITE_OK {
fatalError("database not found")
}
}
func select(query:String) -> Bool {
if sqlite3_prepare_v2(db, "SELECT \(query)", -1, &statement, nil) == SQLITE_OK { return true }
let errmsg = String.fromCString(sqlite3_errmsg(db))
println("error preparing select: \(errmsg!)")
return false
}
func prepare(query:String) -> Bool {
if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK { return true }// "insert into test (name) values (?)"
let errmsg = String.fromCString(sqlite3_errmsg(db))
println("error preparing '\(query)': \(errmsg!)")
return false
}
func bind(parm:Int, value:String) -> Bool {
if sqlite3_bind_text(statement, Int32(parm), value, -1, SQLITE_TRANSIENT) == SQLITE_OK { return true }
let errmsg = String.fromCString(sqlite3_errmsg(db))
println("failure binding foo: \(errmsg!)")
return false
}
func execute() -> Bool {
if sqlite3_step(statement) == SQLITE_DONE { return true }
let errmsg = String.fromCString(sqlite3_errmsg(db))
println("failure in execute: \(errmsg!)")
return false
}
func lastId() -> Int {
return Int(sqlite3_last_insert_rowid(db))
}
func nextRow() -> Bool {
if sqlite3_step(statement) == SQLITE_ROW { return true }
statement = nil
return false
}
func intAt(col:Int) -> Int {
return Int(sqlite3_column_int64(statement, Int32(col)))
}
func textAt(col:Int) -> String {
let name = sqlite3_column_text(statement, Int32(col))
if name != nil {
return String.fromCString(UnsafePointer<Int8>(name))!
}
return ""
}
}
,然后在单个类中:
let sqLite = SQLite.sharedInstance
sqLite.select("* FROM table")
while sqLite.nextRow() {
println(sqLite.textAt(0))
}
我想其余的都是显而易见的.
I guess the rest is obvious.
这篇关于快速保存sqlite数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文