更新表不适用于真实设备(fmdb)

时间:2016-05-18 18:00:35

标签: swift fmdb

我是iOS开发的新手,我遇到了问题。我正在尝试使用FMDB更新表,但尽管它在所有模拟器中都有效,但它不能在真实设备上运行。我确信数据库已传输到设备,因为所有选择查询都正常运行。另一方面,所有更新查询都没有。 我曾尝试使用NSNumber或NSInteger,但......没有。

if (database.open())
    {
        let rs = database.executeQuery("update \(TABLE_NAME) set x=1 where id=\(y.getId())",withArgumentsInArray: nil)
        //database.executeUpdate("update \(TABLE_NAME) set x=1 where id=?", withArgumentsInArray:[NSInteger(y.getId())])
        database.close()
    }

上述两种解决方案均无效。

任何帮助?

1 个答案:

答案 0 :(得分:1)

问题是db文件位于只读资源包中。 当我将db文件复制到Documents文件夹时,一切正常。

我在http://www.theappguruz.com/blog/use-sqlite-database-swift

找到了

这段代码

class func copyFile(fileName: NSString) {
    let dbPath: String = getPath(fileName as String)
    let fileManager = NSFileManager.defaultManager()
    if !fileManager.fileExistsAtPath(dbPath) {

        let documentsURL = NSBundle.mainBundle().resourceURL
        let fromPath = documentsURL!.URLByAppendingPathComponent(fileName as String)

        var error : NSError?
        do {
            try fileManager.copyItemAtPath(fromPath.path!, toPath: dbPath)
        } catch let error1 as NSError {
            error = error1
        }
        let alert: UIAlertView = UIAlertView()
        if (error != nil) {
            alert.title = "Error Occured"
            alert.message = error?.localizedDescription
        } else {
            alert.title = "Successfully Copy"
            alert.message = "Your database copy successfully"
        }
        alert.delegate = nil
        alert.addButtonWithTitle("Ok")
        alert.show()
    }
} 

使用UIAlertView的代码是额外的,您可以省略它。