Перейти к основному содержимому

SQLite

SQLite — это компактная и эффективная система управления базами данных. В отличие от традиционных баз данных, которые требуют сервера, SQLite не требует сервера и встраивается напрямую в приложения.

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

предупреждение

На данный момент мы не поддерживаем SQLite в веб-приложениях.

Рассмотрим, как можно использовать SQLite в вашем приложении на примере. Приложение, где пользователи могут добавлять, обновлять и удалять заметки. Вот как оно будет выглядеть в готовом виде:

Вот шаги для создания такого примера:

  1. Включите SQLite
  2. Настройка базы данных
  3. Добавление SQL-запросов
  4. Отображение всех заметок
  5. Добавить заметку
  6. Обновить заметку
  7. Удалить заметку

1. Включите SQLite

Чтобы включить SQLite в FlutterFlow, перейдите в Settings and Integrations > Integrations > SQLite и включите переключатель Enable SQLite.

img.png

2. Настройка базы данных

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

Если у вас еще нет базы данных SQLite, вы можете легко создать её с помощью таких инструментов, как sqlitebrowser. Просто скачайте sqlitebrowser, создайте новую базу данных, настройте таблицы и, при необходимости, добавьте данные. После подготовки базы данных загрузите файл в FlutterFlow, чтобы интегрировать его в ваше приложение.

В этом примере мы создадим таблицу "Notes" с колонками ID, Title, Details, DueDate и IsCompleted.

Вот как можно создать и настроить базу данных:

Важная информация

В SQLite нет отдельных типов данных для даты-времени или булевых значений. Для хранения значений даты и времени, таких как DueDate, мы используем целочисленный тип данных и представляем дату и время в виде UNIX timestamp. Аналогично, для булевых значений, например, чтобы проверить, завершена ли заметка, SQLite использует числа: 0 представляет false (или не завершено), а 1true (или завершено).

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' — удаление строк, которые соответствуют условию.

В общем, для добавления любого запроса вам нужно указать имя, текст запроса и переменные, которые используются для передачи значений из вашего приложения в запросы. Для запросов на чтение также необходимо определить выходные столбцы. Это поможет вам отображать данные строки в интерфейсе, выбирая имя столбца.

подсказка
  • Чтобы использовать переменные, просто используйте синтаксис ${variableName}. Например: SELECT * FROM Notes WHERE id = ${noteId}
  • При передаче строковых данных в запросах заключайте переменные в одинарные кавычки, например, ${title}, чтобы обозначить их как строки. img_1.png

Ниже приведены запросы, которые нам понадобятся для этого примера:

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 для создания страницы, которая выглядит следующим образом:

img_2.png

Теперь в виджете ListView добавьте запрос к бэкэнду SQLite по следующим инструкциям:

Добавление запроса SQLite:

Перейдите на страницу вашего проекта и выполните следующие шаги для определения запроса SQLite:

  • Выберите виджет (или страницу), на который будет применён запрос.
  • Выберите Backend Query в панели свойств (правое меню).
  • Нажмите Add Query и установите Query Type в положение SQLite Query.
  • Выберите Query Name. (Здесь будут отображаться только запросы на чтение.) и нажмите Confirm.

Как только запрос SQLite будет определен, можно использовать данные, полученные из запроса, для отображения на виджетах внутри. Выполните следующие шаги:

  • Выберите виджет (например, Text), на котором вы хотите отобразить данные.

  • В панели свойств откройте меню Set from Variable > выберите строку [your query name] Row > выберите данные столбца, которые хотите здесь отобразить, и нажмите Confirm.

к сведению

В нашем примере дата завершения хранится как Unix timestamp, что не очень удобно для отображения. Поэтому в примере проекта мы добавили пользовательскую функцию, которая преобразует этот timestamp в удобочитаемый формат даты.

5. Добавить заметку

Вы можете добавить новую заметку в базе данных, используя действие SQLite Query с типом Update Query и именем запроса AddNote.

Вот как это сделать:

6. Обновить заметку

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

Вот как это сделать:

к сведению
  • В этом примере мы обновляем заметку в компоненте нижнего листа. Чтобы обеспечить лучший пользовательский опыт, мы сначала отображаем текущие значения заметки, чтобы пользователи чётко видели, что они будут редактировать. Для отображения значений заметки в нижнем листе мы передаем текущую заметку с Type установленным в SQLite Row.

img_3.png

  • При обновлении значения даты мы также проверяем, была ли дата изменена. Если изменений нет, мы просто передаем обратно то же значение.

7. Удалить заметку

Вы можете удалить существующую заметку из базы данных, используя действие SQLite Query с типом Update Query и именем запроса Delete Note.

Совет профессионала

Чтобы обновить страницу, просто добавьте действие Update App State Action с типом обновления 'Rebuild Current Page'.

Вот как это сделать:

Пример проекта

Ознакомьтесь с полным примером проекта для справки.

Часто задаваемые вопросы

Может ли SQLite обрабатывать сложные структуры данных по сравнению с переменными состояния приложения?

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

Подходит ли SQLite для приложений, которым нужна автономная работа?

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

Будет ли использование SQLite влиять на производительность приложения по сравнению с использованием переменных состояния приложения?

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

Как SQLite обеспечивает безопасность и целостность данных?

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