2015-02-06 2 views
0

В течение нескольких дней у меня проблема, из-за которой я с ума сошел.sqlite3_prepare_v2 возвращает 1

Я использую API swiftdata.swift на GitHub, link Here.

Ну, если я запускаю свой проект на iOS Simulator с Iphone6, он прекрасно работает, но если я использую другое устройство 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

Попробуйте использовать 'libsqlite3.dylib' вместо' libsqlite3.0.dylib' – Mrunal

+0

Извините @CL., В замешательстве я забыл написать сообщение об ошибке. 'SwiftData Ошибка -> Во время: SQL Подготовка -> код: 1 - ошибка SQL или отсутствует база данных -> Детали: нет такой таблицы: PARAMETERS' – Dima

ответ

1

sqlite3_open будет счастливо открыть файл, который не существует, и создать новую, пустую базу данных.

Используйте флаг sqlite3_open_v2 без флага SQLITE_OPEN_CREATE. И используйте правильный путь.

+0

Спасибо, извините мою неопытность – Dima

Смежные вопросы