sqlite3_prepare_v2返回1

时间:2015-02-06 09:10:16

标签: ios xcode sqlite swift

有几天我有一个让我疯狂的问题。

我在GitHub上使用API​​ swiftdata.swift,链接Here

好吧,如果我使用Iphone6在iOS模拟器上启动我的项目,它可以很好地工作,但如果我使用其他iOS设备,应用程序崩溃了。 我发现错误是由指令

引起的
func executeQuery(sqlStr: String, withArgs: [AnyObject]? = nil) -> (result: [SDRow], error: Int?) {            
        var resultSet = [SDRow]()            
        var sql = sqlStr
        if let args = withArgs {
            let result = bind(args, toSQL: sql)
            if let err = result.error {
                return (resultSet, err)
            } else {
                sql = result.string
            }
        }            
        var pStmt: COpaquePointer = nil
        var status = sqlite3_prepare_v2(SQLiteDB.sharedInstance.sqliteDB, sql, -1, &pStmt, nil)
        if status != SQLITE_OK {
            println("SwiftData Error -> During: SQL Prepare")
            println("                -> Code: \(status) - " + SDError.errorMessageFromCode(Int(status)))
            if let errMsg = String.fromCString(sqlite3_errmsg(SQLiteDB.sharedInstance.sqliteDB)) {
                println("                -> Details: \(errMsg)")
            }
            sqlite3_finalize(pStmt)
            return (resultSet, Int(status))
        } 
.........
}

这是与数据库的连接

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.0.dylib,我怀疑这个库只与iPhone6有关。 任何人都可以帮助我吗?

我使用Xcode 6.1

由于

1 个答案:

答案 0 :(得分:1)

sqlite3_open将很乐意打开一个不存在的文件,并创建一个新的空数据库。

在没有SQLITE_OPEN_CREATE标志的情况下使用sqlite3_open_v2。 并使用正确的路径。