Интеграция Capacitor SQLite с Vue 3 и JavaScript
Capacitor JS - это современный инструмент для создания нативных приложений на Android и iOS с помощью веб-технологий. Он является более лёгкой и гибкой альтернативой Cordova. Плагин CapacitorSQLite позволяет работать с базами данных SQLite прямо из вашего Vue 3 приложения. В этой статье мы разберём, как настроить плагин, создать базу данных и выполнять простые запросы.
Что такое CapacitorSQLite и зачем он нужен
CapacitorSQLite - это официальный плагин для работы с SQLite в среде Capacitor. Он даёт возможность хранить структурированные данные локально на устройстве, что особенно полезно для офлайн-приложений, кэширования или хранения пользовательских настроек. В отличие от простого localStorage, SQLite поддерживает сложные запросы, индексы и транзакции.
Установка и настройка плагина
Для начала установите плагин через npm:
npm install @capacitor-community/sqliteЗатем синхронизируйте Capacitor с вашим проектом:
npx cap syncПосле этого добавьте плагин в основной файл вашего приложения (например, main.js):
import { CapacitorSQLite } from '@capacitor-community/sqlite';Плагин автоматически подключается к нативному модулю на устройстве, поэтому дополнительных настроек в Android/iOS не требуется.
Создание базы данных и таблицы
В вашем Vue-компоненте используйте методы плагина для создания базы. Рассмотрим пример инициализации базы данных и таблицы с полями id, name, value:
import { CapacitorSQLite } from '@capacitor-community/sqlite';
import { ref, onMounted } from 'vue';
export default {
setup() {
const dbName = 'my_database';
const db = ref(null);
onMounted(async () => {
const sqlite = new CapacitorSQLite();
await sqlite.createConnection({ database: dbName });
db.value = await sqlite.getConnection({ database: dbName });
// Создаём таблицу
const createTableQuery = `CREATE TABLE IF NOT EXISTS test_table (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
value TEXT
);`;
await db.value.execute({ statement: createTableQuery });
console.log('Таблица создана');
});
return { db };
}
};Обратите внимание: база данных создаётся автоматически при первом обращении. Папка public/assets/databases/ не требуется - база хранится во внутреннем хранилище приложения.
Выполнение запросов: вставка и чтение данных
После создания таблицы можно вставлять данные:
const insertQuery = `INSERT INTO test_table (name, value) VALUES ('example', 'test_value');`;
await db.value.execute({ statement: insertQuery });Для чтения данных используйте метод query:
const result = await db.value.query({ statement: 'SELECT * FROM test_table' });
console.log(result.values); // массив объектов с полями id, name, valueПлагин возвращает результат в виде объекта с полем values, содержащим массив строк.
Работа с существующей базой данных
Если у вас есть готовая база данных (например, в папке public/assets/databases/), её можно импортировать с помощью метода importDatabase:
await sqlite.importDatabase({ database: dbName, from: 'assets/databases/my_database.db' });Убедитесь, что файл базы данных находится в правильной директории и имеет расширение .db. После импорта вы можете подключаться к ней как обычно.
Типичные ошибки и их решение
- Плагин не найден: проверьте, что вы выполнили
npx cap syncи пересобрали проект. - Ошибка подключения: убедитесь, что вы используете
createConnectionпередgetConnection. - Запросы не выполняются: используйте
awaitдля всех асинхронных методов, иначе промис не будет разрешён. - База данных не сохраняется: при переустановке приложения база удаляется. Для постоянного хранения используйте
createConnectionс тем же именем.
Заключение
CapacitorSQLite - мощный и простой в использовании плагин для работы с SQLite в Vue 3. Следуя приведённым шагам, вы легко интегрируете локальную базу данных в своё нативное приложение. Экспериментируйте с запросами и используйте транзакции для повышения производительности.