SQLite
SQLite — это компактная и эффективная система управления базами данных. В отличие от традиционных баз данных, требующих сервера, SQLite работает без сервера и встраивается непосредственно в приложения.
Она идеально подходит для мобильных приложений, где ресурсы ограничены, а полноценный сервер базы данных нецелесообразен. Например, она подходит для мобильного приложения, которое должно хранить данные локально, такого как трекер личных финансов или приложение для записи о здоровье, особенно когда требуется работа в автономном режиме.
На данный момент мы не поддерживаем SQLite в веб-приложениях.
Давайте разберёмся, как вы можете использовать SQLite в своём приложении на примере. Приложение, где пользователи могут д обавлять, обновлять и удалять заметки. Вот как оно выглядит после завершения:
Вот шаги для создания такого примера:
- Включить SQLite
- Настройка базы данных
- Добавление SQL-запросов
- Отображение всех заметок
- Добавление заметки
- Обновление заметки
- Удаление заметки
1. Включить SQLite
Чтобы включить SQLite в FlutterFlow, перейдите в раздел Settings and Integrations > Integrations > SQLite и включите переключатель Enable SQLite.

2. Настройка базы данных
На этапе настройки базы данных вам потребуется загрузить файл базы данных SQLite и присвоить ему имя. Этот процесс критически важен для инициализации базы данных при запуске приложения.
Если у вас ещё нет базы данных SQLite, вы можете легко создать её с помощью инструментов, таких как sqlitebrowser. Просто скачайте sqlitebrowser, создайте новую базу данных, настройте таблицы и, при необходимости, добавьте данные. После подготовки базы данных загрузите файл в FlutterFlow, чтобы интегрировать его с вашим приложением.
Для этого примера мы создадим таблицу "Notes" с колонками ID, Title, Details, DueDate и IsCompleted.
Рекомендуется избегать использования зарезервированных ключевых слов SQL, таких как type и data, в качестве имён колонок, чтобы предотвратить возможные ошибки сборки или непредсказуемое поведение. SQLite резервирует определённые слова для своей SQL-синтаксиса, и использование их в качестве идентификаторов без надлежащей обработки может вызвать проблемы. Для полного списка зарезервированных ключевых слов обратитесь к SQL reserved words.
Вот как вы можете создать и настроить базу данных:
SQLite не имеет специальных типов данных для даты-времени или булевых значений. Для хранения значений даты-времени, таких как DueDate, мы используем тип данных integer и представляем дату-время в формате UNIX timestamp. Аналогично, для булевых значений, например, для проверки, завершена ли заметка, SQLite использует целые числа, где 0 представляет false (или незавершённую) и 1 представляет true (или завершённую).
3. Добавление SQL-запросов
SQL-запросы — это инструкции, используемые для взаимодействия с базой данных. Мы разрешаем добавлять запросы в двух разных разделах:
1. Запросы на чтение
Сюда входят инструкции, которые извлекают данные из базы данных, но не изменяют их. Некоторые распространённые примеры:
SELECT * FROM customers;— извлечь все строки и колонки.SELECT name, city FROM customers;— извлечь конкретные колонки.SELECT * FROM customers WHERE city = 'New York';— извлечь строки, соответствующие условию.
2. Запросы на обновление
Сюда входят инструкции, которые изменяют базу данных, такие как:
INSERT INTO customers (name, address, city) VALUES ('John', '555 Main St', 'New York')— добавить новые строки.UPDATE customers SET address = '123 Main Street' WHERE name = 'John'— обновить существующие строки.DELETE FROM customers WHERE city = 'Chicago'— удалить строки, соответствующие условию.
В общем, чтобы добавить любой запрос, вам нужно указать имя, инструкцию запроса и переменные, которые используются для передачи значений из вашего приложения в запросы. Для за просов на чтение также необходимо определить выходные колонки. Это поможет отображать данные строк в UI, выбирая имя колонки.
- Чтобы использовать переменные, просто применяйте синтаксис
${variableName}. Например:SELECT \* FROM Notes WHERE id = ${noteId} - При передаче строковых или текстовых данных в запросах заключайте переменные в одинарные кавычки, как
${title}, чтобы обозначить их как строки.
Ниже приведены запросы, которые потребуются для этого примера:
1. GetAllNotes
Этот запрос извлечёт все заметки из базы данных.
Select * from Notes
2. AddNote
Этот запрос добавит новую заметку в базу данных.
INSERT INTO Notes (Title, Details, DueDate, IsCompleted) VALUES ('${title}', '${details}', ${dueDate}, 0);
3. UpdateNote
Этот запрос обновит существующую заметку на основе ID заметки.
UPDATE Notes
SET
Title = '${title}',
Details = '${details}',
DueDate = ${dueDate},
IsCompleted = ${isCompleted}
WHERE ID = ${id};
4. DeleteNote
Этот запрос удалит заметку на основе ID заметки.
DELETE FROM Notes WHERE ID = ${id};
4. Отображение всех заметок
Чтобы показ ать список заметок, вы можете использовать виджеты ListView > Container для создания страницы, которая выглядит следующим образом:

Теперь на виджете ListView добавьте запрос к SQLite backend в соответствии с инструкциями ниже:
Добавление запроса к SQLite:
Перейдите на страницу вашего проекта и следуйте шагам ниже, чтобы определить запрос к SQLite:
- Выберите виджет (или страницу), на который нужно применить запрос.
- В панели свойств (правое меню) выберите Backend Query.
- Нажмите Add Query и установите тип запроса в SQLite Query.
- Выберите Query Name. (Здесь отобразятся только запросы на чтение.) и нажмите Confirm.
После определения запроса к SQLite вы можете использовать данные, полученные из запроса, для отображения на виджетах внутри. Следуйте шагам ниже:
-
Выберите виджет (например, Text), на котором вы хотите отобразить данные.
-
В панели свойств откройте меню Set from Variable > выберите [имя вашего запроса] Row > выберите данные колонки, которые вы хотите отобразить здесь, и нажмите Confirm.
В нашем примере дата выполнения хранится как Unix timestamp, что неудобно для отображения пользователю. Поэтому в примерном проекте мы включили пользовательскую функцию, которая преобразует этот timestamp в удобный для чтения формат даты.
5. Добавление заметки
Вы можете добавить новую заметку в базу данных с помощью действия SQLite query Action с типом Update Query и именем запроса AddNote.
Вот как это сделать:
6. Обновление заметки
Для обновления значений заметки, например, для отметки о завершении или изменения других полей, используйте действие SQLite Query Action и установите тип в Update Query. Здесь укажите имя запроса Update Note.
Вот как это сделать:
- В этом примере мы обновляем заметку на компоненте bottom sheet. Чтобы обеспечить лучший пользовательский опыт, мы изначально отображаем текущие значения заметки, чтобы пользователи чётко понимали, что они собираются редактировать. Для отображения значений заметки в bottom sheet мы передаём текущую заметку с Type, установленным в SQLite Row.

- При обновлении значения даты мы также проверяем, было ли изменено значение даты. Если изменений нет, мы просто возвращаем то же значение, которое получили.
7. Удаление заметки
Вы можете удалить существующую заметку из базы данных с помощью действия SQLite query action с типом Update Query и именем запроса Delete Note.
Чтобы обновить страницу, просто добавьте действие Update App State Action с типом обновления 'Rebuild Current Page'.
Вот как это сделать:
Ознакомьтесь с полным примерным проектом для справки.
FAQs
Может ли SQLite обрабатывать сложные структуры данных по сравнению с переменными состояния приложения?
Да, SQLite может обрабатывать сложные структуры данных гораздо эффективнее. Она позволяет структурированно хранить данные, выполнять сложные запросы, сортировку и фильтрацию, что сложно реализовать с переменными состояния приложения.
Является ли SQLite хорошим выбором для приложений, требующих автономной функциональности?
Безусловно. SQLite хранит данные локально, что делает её отличным выбором для приложений, которым нужно работать в автономном режиме. Пользователи могут получать доступ и изменять данные без подключения к интернету.
Влияет ли использование SQLite на производительность приложения по сравнению с переменными состояния приложения?
SQLite разработана для лёгкости и эффективности, поэтому в целом она не оказывает негативного влияния на производительность приложения. На самом деле, для больших наборов данных она эффективнее, чем хранение данных в переменных состояния приложения.
Как SQLite обеспечивает безопасность и целостность данных?
SQLite поддерживает целостность данных и транзакционные операции. Это означает, что состояние базы данных остаётся последовательным даже в случае неожиданных прерываний, таких как сбои приложения или отключение питания.