Существует несколько способов получения приложением доступа к локальной базе данных SQL и работы с ней. Проект приложения может быть разным с точки зрения структуры кода приложения, последовательности и синхронизации выполнения операций и т. д. Выбранные методы влияют на простоту разработки приложения. Эти методы также влияют на то, насколько легко можно будет изменить приложение в будущем при его обновлении. Кроме того, они влияют на производительность приложения с точки зрения пользователя.
Распространение заполненной базы данных
При использовании в приложении AIR локальной базы данных SQL приложение ожидает, что база данных будет иметь определенную структуру таблиц, столбцов и т. д. Некоторые приложения также ожидают, что файл базы данных будет заполнен определенными данными. Одним из способов обеспечения правильной структуры базы данных является создание базы данных в коде приложения. При загрузке приложения проверяется наличие файла базы данных в определенном местоположении. Если файл отсутствует, приложение выполняет ряд команд по созданию файла базы данных, структуры базы данных и заполнению таблиц исходными данными.
Код, создающий базу данных и ее таблицы, чаще всего является сложным. Как правило, он используется только один раз за время существования установленного приложения, но увеличивает размер приложения и усложняет его. Вместо создания базы данных, структуры и данных программным способом можно распространять предварительно заполненную данными базу данных вместе с приложением. Для распространения предварительно определенной базы данных вставьте файл базы данных в пакет AIR приложения.
Как и все файлы, входящие в пакет AIR, файл базы данных устанавливается в каталог приложения (каталог, представленный свойством
File.applicationDirectory
). Однако файлы в этом каталоге предназначены только для чтения. Используйте файл из пакета AIR в качестве «шаблона» базы данных. При первом запуске приложения пользователем скопируйте исходный файл базы данных в
Указание на каталог хранилища приложения
пользователя (или в другое местоположение) и используйте эту базу данных в приложении.
Рекомендации по работе с локальными базами данных SQL
Далее приводится описание рекомендуемых методов, которые можно использовать для улучшения производительности, безопасности и обслуживания приложений при работе с локальными базами данных SQL.
Предварительное создание подключений к базам данных
Даже если при первичной загрузке приложение не выполняет никаких инструкций, создайте объект SQLConnection и вызовите его метод
open()
или
openAsync()
заранее (например, после начального запуска приложения) во избежание задержек при выполнении инструкций. См. раздел «
Подключение к базе данных
».
Повторное использование подключений к базе данных
Если вы обращаетесь к определенной базе данных на протяжении всего времени работы приложения, рекомендуется сохранять ссылку на экземпляр SQLConnection и повторно использовать его в приложении, а не закрывать и снова открывать подключение. См. раздел «
Подключение к базе данных
».
Предпочтительное использование режима асинхронного выполнения
При написании кода доступа к данным возникает соблазн использовать синхронное, а не асинхронное выполнение операций, так как для синхронных операций требуется более короткий и менее сложный код. Однако, как было сказано в разделе
Использование синхронных и асинхронных операций базы данных
, синхронные операции могут негативно сказаться на производительности, что очевидно для пользователей и омрачает их работу с приложением. Время, затраченное на выполнение операции, зависит от самой операции и особенно от объема обрабатываемых данных. Например, инструкция SQL
INSERT
, которая добавляет только одну строку в базу данных, требует меньше времени, чем инструкция
SELECT
, которая извлекает тысячи строк данных. Однако при использовании синхронного режима для выполнения нескольких операций эти операции объединяются. Даже если время, затрачиваемое каждой операцией, невелико, приложение «застывает» до тех пор, пока не будут выполнены все синхронные операции. В результате общее время выполнения нескольких операций может оказаться достаточным для остановки работы приложения.
Используйте асинхронные операции в качестве стандартного подхода, особенно с операциями, в которых задействовано большое количество строк. Существует метод, при помощи которого можно разделить на части обработку больших групп результатов, полученных выполнением инструкции
SELECT
. Этот метод описан в разделе
Извлечение результатов SELECT по частям
. Однако этот метод можно применять только в режиме асинхронного выполнения. Используйте синхронные операции только в том случае, если в режиме асинхронного выполнения невозможно достичь той или иной функциональности, продумав при этом возможные проблемы с производительностью приложения, с которыми столкнутся пользователи. Асинхронное выполнение предполагает использование более сложного кода. Однако помните, что код потребуется написать только один раз, а пользователи будут работать с приложением регулярно, быстро или медленно.
Во многих случаях при использовании отдельного экземпляра SQLStatement для каждой инструкции SQL, которую нужно выполнить, можно поставить в очередь сразу несколько операций SQL, что делает асинхронный код подобным синхронному с точки зрения написания кода. Дополнительную информацию см. в разделе
Основные сведения о модели асинхронного выполнения
.
Используйте отдельные инструкции SQL и не изменяйте свойство экземпляра SQLStatement
Создавайте отдельный экземпляр SQLStatement для каждой инструкции SQL, которая выполняется в приложении несколько раз. Используйте этот экземпляр SQLStatement при каждом выполнении команды SQL. Предположим, вы создаете приложение, которое использует четыре разные операции SQL, выполняемые несколько раз. В таком случае создайте четыре экземпляра SQLStatement и вызовите метод
execute()
каждого экземпляра для его выполнения. Старайтесь не использовать один экземпляр SQLStatement для всех инструкций SQL, заново определяя свойство
text
каждый раз перед выполнением инструкции.
Использование параметров инструкций
Используйте параметры SQLStatement — никогда не вставляйте введенные пользователем данные в текст инструкции. Использование параметров улучшает защиту приложения за счет предотвращения атак с внедрением SQL. Это позволяет использовать объекты в запросах (а не только литеральные значения SQL). Это также повышает эффективность выполнения инструкций, так как они могут использоваться многократно без необходимости повторной компиляции при каждом их выполнении. Дополнительные сведения см. в разделе
Использование параметров в инструкциях
.
|
|
|