在Swift中为sqlite3创建实例
问题描述:
嗨我正在Swift项目中使用sqlite数据库。在Objective-C中,我们只在类文件中导入sqlite3.h
,并为sqlite3
创建实例,如sqlite3 *db;
我们将其用于整个程序。
像明智一样,我怎么实现它在迅速?在Swift中为sqlite3创建实例
答
从https://github.com/ryanfowler/SwiftData/blob/master/SwiftData.swift
private class SQLiteDB {
class var sharedInstance: SQLiteDB {
struct Singleton {
static let instance = SQLiteDB()
}
return Singleton.instance
}
var sqliteDB: COpaquePointer = nil
var dbPath = SQLiteDB.createPath()
var inTransaction = false
var isConnected = false
var openWithFlags = false
var savepointsOpen = 0
let queue = dispatch_queue_create("SwiftData.DatabaseQueue", DISPATCH_QUEUE_SERIAL)
// MARK: - Database Handling Functions
//open a connection to the sqlite3 database
func open() -> Int? {
if inTransaction || openWithFlags || savepointsOpen > 0 {
return nil
}
if sqliteDB != nil || isConnected {
return nil
}
let status = sqlite3_open(dbPath.cStringUsingEncoding(NSUTF8StringEncoding)!, &sqliteDB)
if status != SQLITE_OK {
println("SwiftData Error -> During: Opening Database")
println(" -> Code: \(status) - " + SDError.errorMessageFromCode(Int(status)))
if let errMsg = String.fromCString(sqlite3_errmsg(SQLiteDB.sharedInstance.sqliteDB)) {
println(" -> Details: \(errMsg)")
}
return Int(status)
}
isConnected = true
return nil
}
}
不要忘记你的目标对libsqlite3.dylib
[斯威夫特访问SQLite数据库]的可能重复(http://stackoverflow.com/链接question/24102775/access-an-sqlite-database-in-swift) – Moritz
在那个链接中他们没有提到如何为sqlite3创建一个实例。 –
是的,他们有这个答案的第2章:http://stackoverflow.com/a/28642293/2227743。无论如何,你可以使用优秀的https://github.com/stephencelis/SQLite.swift。 – Moritz