2014-10-13 16 views
6

Tworzę aplikację, która korzysta z dużej bazy danych z 5 różnymi tabelami. Chcę zaimportować tę bazę danych do pakietu aplikacji i mieć możliwość wysyłania zapytań przez tabele. Baza danych nie będzie edytowana przez użytkownika, więc dodawanie i usuwanie rekordów nie jest wymagane.Importowanie i sprawdzanie poprzez bazę danych SQLite w Swift - iOS

Jaki byłby najlepszy sposób dodania bazy danych w aplikacji?

Odpowiedz

9

Proces wygląda następująco:

  1. Dodaj bazę danych do pakietu. Po przeciągnięciu do projektu możesz dodać go do celu, który reprezentuje twoją główną aplikację. Alternatywnie przejrzyj ustawienia docelowe, kliknij "Utwórz fazy" i potwierdź, że baza danych pojawia się na liście "Kopiuj zasoby pakietu".

  2. Użyj ramy, takiej jak FMDB, aby uprościć swoje życie. Jest to napisane w Objective-C, ale działa również w Swift. Co musisz zrobić, to:

    • Skopiuj pliki .h i .m dla FMDB do swojego projektu;

    • Po wyświetleniu monitu o utworzenie "nagłówka pomostowego", zrób to;

    • Dodaj następujący wiersz do pomostowego nagłówka:

      #import "FMDB.h" 
      

    Wykonując te czynności, można użyć tej ramy opracowany w Objective-C na swoim Swift projektów.

  3. Możesz teraz napisać swój kod Swift za pomocą struktury FMDB. Na przykład, kod Swift aby otworzyć bazę danych, wybrać kolumny x, y i z z tabeli o nazwie test, wyglądałby następująco:

    let path = NSBundle.mainBundle().pathForResource("test", ofType:"sqlite") 
    
    let database = FMDatabase(path: path) 
    
    if !database.open() { 
        print("Unable to open database") 
        return 
    } 
    
    if let rs = database.executeQuery("select * from test", withArgumentsInArray: nil) { 
        while rs.next() { 
         let x = rs.stringForColumn("x") 
         let y = rs.stringForColumn("y") 
         let z = rs.stringForColumn("z") 
         print("x = \(x); y = \(y); z = \(z)") 
        } 
    } else { 
        print("executeQuery failed: \(database.lastErrorMessage())") 
    } 
    
    database.close() 
    
Powiązane problemy