2017-09-07 2 views
0

Ich möchte eine bestehende Datenbank mit FMDB öffnen. Die DB sollte eine sqlite Datenbank mit der Endung .db sein.Öffnen DB mit FMDB in Swift

mein Code: statisch let geteilt: DBManager = DBManager()

let databaseFileName = "/mydb.db" 

var pathToDatabase: String! 

var pathNSURL: NSURL! 

var database: FMDatabase! 


override init() { 
    super.init() 

    let documentsDirectory = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString) as String 

    let zwerg = documentsDirectory + databaseFileName 

    let pathNSURL = NSURL(fileURLWithPath: zwerg) 

    let pathString = documentsDirectory + databaseFileName 

    pathToDatabase = pathNSURL.path 
    print(pathToDatabase) 
} 


func firstQuestion() -> Bool { 
    if openDatabase(){ 
     let query = "SELECT * FROM movie" 

     do { 
      let result = try database.executeQuery(query, values: nil) 
      print(result) 
     } 
     catch { 
      print(error.localizedDescription) 
     } 
     database.close() 
     return true 
    } 
    return false 
} 

func openDatabase() -> Bool { 
    if database == nil { 
     print(FileManager.default.fileExists(atPath: pathToDatabase)) 
     if FileManager.default.fileExists(atPath: pathToDatabase) { 
      print("Database set new path -> File exists") 
      database = FMDatabase(path: pathToDatabase) 
     } 
    } 

    if database != nil { 
     print("Database != nil") 
     if database.open() { 
      print("Database is open in != nil") 
      return true 
     } 
    } 

    return false 
} 

Im die Methode firstQuestion() von einem VC Aufruf:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    print(DBManager.shared.firstQuestion()) 
} 

Mein Problem ist, dass die fileExists- Methode gibt immer false zurück. Der Dateiname ist korrekt. Dies ist mein erstes Projekt mit einer Datenbank in swift, also habe ich vielleicht einen dummen Fehler gemacht ... Irgendwelche Vorschläge?

Danke für Ihre Hilfe!

Antwort

0
let fileManager = FileManager.default 
let docURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first! 

let databaseURL = docURL.appendingPathComponent("databaseNaeme.db") 

und initialisieren Datenbank als:

database = FMDatabase(path: databaseURL.absoluteString) 
+0

Dies war der Weg: file: /// Users/Overburned/Library/Developer/CoreSimulator/Geräte/B5EAE004-A036-4BD5-A692-C25EF3875D25/Daten/Container/Daten/Anwendung/3BC1CBA7-48E1-4A17-A456-108667E7F773/Dokumente/mydb.db Aber es war nicht die Lösung Danke trotzdem – OverBurned

+0

mit Ihrer zweiten Lösung bekomme ich diese Fehlermeldung: fataler Fehler: unerwartet gefunden Null beim Entpacken ein optionaler Wert – OverBurned

+0

Versuchen Sie, aktualisiert, es funktioniert für mich – Alex