在SWIFT中使用FMDB访问外部数据库

时间:2016-06-23 07:52:27

标签: ios swift sqlite fmdb

我有一个外部数据库文件,我想访问该文件中的记录到我的应用程序中。以下是我从链接http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_8_Application_using_Swift_and_FMDB获得的代码。在下面的代码中,已经解释了如何创建数据库。请帮助我在哪里将我的外部sqlite文件放在Xcode中以及如何通过FMDB访问它

override func viewDidLoad() {
    super.viewDidLoad()

    let filemgr = NSFileManager.defaultManager()
    let dirPaths =
    NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
            .UserDomainMask, true)

    let docsDir = dirPaths[0] as! String

    databasePath = docsDir.stringByAppendingPathComponent(
                    "contacts.db")

    if !filemgr.fileExistsAtPath(databasePath as String) {

        let contactDB = FMDatabase(path: databasePath as String)

        if contactDB == nil {
            println("Error: \(contactDB.lastErrorMessage())")
        }

        if contactDB.open() {
            let sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"
            if !contactDB.executeStatements(sql_stmt) {
                println("Error: \(contactDB.lastErrorMessage())")
            }
            contactDB.close()
        } else {
            println("Error: \(contactDB.lastErrorMessage())")
        }
    }
}

以下是使用FMDB从数据库检索数据的代码,但我无法知道如何使用FMDB访问我的外部数据库。在此示例中,此人访问了他首次在viewDidLoad()

中创建的数据库
@IBAction func findContact(sender: AnyObject) {
    let contactDB = FMDatabase(path: databasePath as String)

    if contactDB.open() {
        let querySQL = "SELECT address, phone FROM CONTACTS WHERE name = '\(name.text)'"

        let results:FMResultSet? = contactDB.executeQuery(querySQL,
         withArgumentsInArray: nil)

        if results?.next() == true {
            address.text = results?.stringForColumn("address")
            phone.text = results?.stringForColumn("phone")
            status.text = "Record Found"
        } else {
            status.text = "Record not found"
            address.text = ""
            phone.text = ""
        }
        contactDB.close()
    } else {
        println("Error: \(contactDB.lastErrorMessage())")
    }
}

1 个答案:

答案 0 :(得分:0)

我发布了如何在FMDB中设置Swift的完整答案。

这是逐步过程..

  1. 将文件从fmdbmaster/src/fmdb复制/粘贴到您的项目中。
  2. 然后你必须创建桥接标题#import "FMDB.h"
  3. 此外,您必须设置标志如下

    • 转到项目>目标>构建设置>编译来源

    • 在这里,您会找到一些文件.h.m

    • 在名为
      的三个文件上设置标记'-fno-objc-arc' FMDatabase.mFMResultSet.m& FMDatabaseAdditions.m

    • 要设置标志,您必须双击编译资源中文件的字段前端。而已。标志将被设置。

  4. 毫无疑问,你可以问我。