Вставка исходных данных после создания базы данных в SQLite.swift

У меня есть база данных SQLite, которую я хочу заполнить некоторыми исходными данными.

Используя SQLite.swift, этот метод, кажется, работает:

do {
    let _ = try db.run( userDictionary.create(ifNotExists: false) {t in
        t.column(wordId, primaryKey: true)
        t.column(word, unique: true)
        t.column(frequency, defaultValue: 1)
        t.column(following, defaultValue: "")
        })

} catch _ {
    print("table already exists")
    return
}

// Add some initial data for a new database
print("adding new data")
myMethodToInsertInitialData()

Однако это работает так, что я использую ifNotExists: false для выдачи ошибки каждый раз после первоначального создания базы данных. (Установка его на true не вызовет ошибку (или не разрешит досрочный возврат).) Однако преднамеренное создание ошибки каждый раз, кроме первого раза, кажется плохим программированием. Я не имею в виду это как ошибку. Я просто хочу вставить некоторые данные во вновь созданную базу данных. Есть ли лучший способ сделать это или это то, что делают все?


person Suragch    schedule 12.05.2016    source источник
comment
Вы можете установить логическое значение в NSUserDefaults или в списке свойств plist, чтобы проверить, запущено ли приложение впервые.   -  person TPlet    schedule 12.05.2016
comment
@TPlet, я подумал об этом, и это допустимый вариант. Однако причина, по которой я отклоняюсь от этого, заключается в том, что я мог бы удалить таблицу базы данных и воссоздать ее через некоторое время после первого запуска. С помощью описанного выше метода я добавляю начальные данные, когда (и только когда) создается таблица базы данных.   -  person Suragch    schedule 12.05.2016
comment
Ну ладно. Я не использовал SQLite.swift, поэтому у меня есть вопрос: в документах говорится, что вы можете получить доступ к таблице, например. let users = Table('users') . Что произойдет, если эта таблица не существует? Это просто ноль, или он падает? `   -  person TPlet    schedule 12.05.2016
comment
Это создает таблицу SQLite.swift, а не фактическую таблицу базы данных, поэтому сбоя не происходит.   -  person Suragch    schedule 13.05.2016


Ответы (1)


Чтобы проверить, доступны ли данные в таблице или нет в SQLite.swift

do
{
    db = try Connection(YOUR_DB_PATH)
    let intCount : Int64  = db.scalar("SELECT count(*) FROM yourTableName") as! Int64
    if (intCount == 0)
    {
        //callWebServiceCall()
    }
    else
    {
        //getDataFromDB()
    }
}
catch
{
    print("error")
}
person Ashish Kakkad    schedule 12.05.2016
comment
Когда я читал документацию, я не очень хорошо понимал скаляры. Таким образом, даже если таблица станет очень большой, это будет быстрый поиск, верно? - person Suragch; 12.05.2016
comment
@Suragch Да, это просто зачтется! - person Ashish Kakkad; 24.05.2016