Открывать базу данных sqlite несколько раз или один раз? - PullRequest
0 голосов
/ 07 июня 2019

Я новичок в Swift, изучаю работу с SQlite, мне интересно, где открыть базу данных?

a) несколько раз, на каждом ViewController мне нужно использовать

b) открыть один раз исохранить его как экземпляр для всего приложения?- как это сделать?

Теоретически, решение a означает, что я буду загружать базу данных в память каждый раз, когда захочу ее использовать.Может быть, я ошибаюсь, но это уродливо.

Могу ли я получить некоторые разъяснения от опытных быстрых разработчиков?

У меня есть такой код из учебника, но он используется на ViewController


//the database file
       let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
           .appendingPathComponent("HeroesDatabase.sqlite")

       //opening the database
       if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
           print("error opening database")
       }

1 Ответ

0 голосов
/ 07 июня 2019

Никакой код SQLite не должен быть в любом контроллере представления.Вы должны написать класс, который инкапсулирует все чтение и запись данных из / в базу данных.Затем другие ваши классы (например, контроллеры представления) запрашивают и отправляют данные этому классу по мере необходимости.

Другими словами, один класс базы данных представляет ваши данные и их сохранность.Никакой другой код не должен знать, что вы даже используете SQLite.

Что касается вашего первоначального вопроса, нет ничего плохого в том, чтобы поддерживать одно соединение с базой данных открытым в течение всего срока службы вашего приложения.Это то, чем я занимаюсь.И имея все это в одном классе, все становится просто.База данных не «в памяти» только потому, что она открыта.Но это действительно зависит от того, насколько тяжёл доступ к вашей базе данных.В моем приложении каждый экран и каждое нажатие приводит к доступу к базе данных.Поэтому у меня есть одно открытое соединение, и я хорошо использую подготовленные заявления.Но если у вас есть только случайный доступ к базе данных, открывать, запрашивать и закрывать каждый раз не будет проблемой.У меня также много накладных расходов при открытии базы данных.Я устанавливаю множество пользовательских функций и других настроек.Делать это для каждого запроса было бы больно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...