Импорт и запрос через базу данных SQLite в Swift-iOS

Я делаю приложение, которое использует большую базу данных с 5 разных таблиц. Я хочу импортировать эту базу данных в пакет приложений и иметь возможность запрашивать через таблицы. База данных не может редактироваться пользователем, поэтому добавление и удаление записей не требуется.

каким будет лучший способ добавить базу данных в приложение?

1 ответов


процесс выглядит следующим образом:

  1. добавьте базу данных в свой комплект. При перетаскивании его в проект можно добавить его в целевой объект, представляющий основное приложение. Кроме того, просмотрите целевые параметры, нажмите "этапы сборки" и убедитесь, что база данных отображается в списке "копировать ресурсы пакета".

  2. используйте фреймворк как FMDB по упростить вашу жизнь. Это написано в Objective - C, но отлично работает в Свифт тоже. Что вам нужно сделать, это:

    • скопировать .h и .m файлы для FMDB в ваш проект;

    • при появлении запроса на создание "заголовка моста" сделайте это;

    • добавьте следующую строку в заголовок моста:

      #import "FMDB.h"
      

    следуя этим шагам, вы можете использовать эту структуру, разработанную в Objective-C, в своих проектах Swift.

  3. теперь вы можете написать свой Swift-код, используя фреймворк FMDB. Например, в Swift-коде для открытия базы данных выберите columns x, y и z из таблицы test, будет выглядеть так:

    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()