【问题标题】:Swift and SQLite斯威夫特和 SQLite
【发布时间】:2015-04-27 09:14:42
【问题描述】:

我正在关注在 Swift 上使用 SQLite 的教程,一切正常(代码如下)。我对数据库本身感到困惑。如果专家能向我澄清以下问题,我将不胜感激:
1- 我希望数据库成为离线使用的应用程序的一部分 我的意思是用户将下载包含数据库的应用程序,我应该在哪里复制数据库本身?
2- 我试图将数据库复制到支持文件夹,但是当应用程序在我的 iphone 中运行时,数据库没有复制到我的 iphone。而不是我必须在 iphone
3 中构建一个新数据库 - 数据库会很大,所以我不想在应用程序中构建它(我计划使用 Firefox SQLite 管理器从 excel 复制数据,替代方案非常欢迎复制)。 任何提示都非常受欢迎。提前致谢。

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())")
        }
    }
}

【问题讨论】:

    标签: database xcode swift sqlite fmdb


    【解决方案1】:

    创建自己的数据库并将数据库放入您的xcode项目中(只需将数据库拖到xcode项目中)并使用以下代码将数据库复制到您的应用程序中

     override func viewDidLoad() {
        super.viewDidLoad()
    
        var fileManager = NSFileManager.defaultManager()
        var Sourcepath = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent("DataBase.db");
        let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
        let databaseStr = "DataBase.db"
        let dbPath = docsPath.stringByAppendingPathComponent(databaseStr)
        //check for database existance if not exsit than copy the database destination path
        if(fileManager .fileExistsAtPath(dbPath) == false) {
            var error:NSError?
            fileManager.copyItemAtPath(Sourcepath!, toPath: dbPath, error: &error)
        }
    }
    

    一旦数据库被复制到应用程序包中
    1) 将 libsqlite3.dylib 添加到您的项目
    添加转到 application target ->Build Phases ->Link Binary With Libraries 并点击 +

    2) 将#import <sqlite3.h>这一行导入Objective-C桥头文件
    创建桥头请参阅此How to use Objective-C Classes in Swift
    知道您将能够在您的 swift 代码中访问所有 sqlite 方法

    【讨论】:

    • 嗨,我应该在哪里插入您的代码?我遇到了一些错误
    • viewDidload() 函数
    • 或应用程序 didFinishLaunchingWithOptions 方法
    • 我删除我的代码并插入你的,没有错误,但仍然无法检索我在数据库中插入的联系人:(
    • 如果您在模拟器中运行应用程序,只需在我的代码中添加 println(dbPath) 它将为数据库保存路径打开路径并检查您的数据库是否实际插入值?
    【解决方案2】:

    我认为你不能在 Swift 中插入数据库,如果我记得它是专有的,所以你不能在应用程序之外进行编辑......

    【讨论】:

    • 也许在 CoreData 上是正确的,但我正在尝试使用 FMDB
    猜你喜欢
    • 2017-07-22
    • 2017-03-24
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2017-11-13
    相关资源
    最近更新 更多