作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我知道有一些资源可用于此目的,但没有一个能清楚地说明如何正确地做到这一点。
我已经填充了 .sqlite 数据库 (MTrader.db),我想将它连接到我的 swift 项目并将数据库中的数据加载到微调器中。
我试了很多方法都不行。我尝试编辑lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? AppDelegete.swift 中的方法
if !NSFileManager.defaultManager().fileExistsAtPath(url.path!) {
let sourceSqliteURLs = [NSBundle.mainBundle().URLForResource("MTrader", withExtension: "db")!]
let destSqliteURLs = [self.applicationDocumentsDirectory.URLByAppendingPathComponent("MTrader.db")]
var error:NSError? = nil
for var index = 0; index < sourceSqliteURLs.count; index++ {
NSFileManager.defaultManager().copyItemAtURL(sourceSqliteURLs[index], toURL: destSqliteURLs[index], error: &error)
}
}
由于某些原因,上述代码无法正常工作。我在我的项目中复制了我的数据库文件。那么我的代码是否有任何错误,或者是否有更好的方法来使用我现有的数据库而不创建新数据库并填充它?
最佳答案
首先将 libsqlite3.dylib 添加到您的 Xcode 项目中(在项目设置/构建阶段/将二进制文件与库链接),然后使用类似 fmdb 的东西,它使处理 SQLite 变得容易得多。它是用 Objective-C 编写的,但也可以在 Swift 项目中使用。
然后你可以写一个DatabaseManager
类,例如...
import Foundation;
class DatabaseManager {
private let dbFileName = "database.db"
private var database:FMDatabase!
init() {
openDatabase()
}
func openDatabase() {
let resourcePath = NSBundle.mainBundle().resourceURL!.absoluteString
let dbPath = resourcePath?.stringByAppendingPathComponent(dbFileName)
let database = FMDatabase(path: dbPath)
/* Open database read-only. */
if (!database.openWithFlags(1)) {
println("Could not open database at \(dbPath).")
} else {
self.database = database;
}
}
func closeDatabase() {
if (database != nil) {
database.close()
}
}
func query(queryString:String) {
if let db = database, q = db.executeQuery(queryString, withArgumentsInArray: nil) {
while q.next() {
let data = q.stringForColumn("columnName")
// Do whatever here with fetched data, usually add it to an array and return that array
}
}
}
}
关于ios - 如何在 swift 中使用现有的 SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847532/
我是一名优秀的程序员,十分优秀!