Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Работа с SQLite базой данных через JavaScript в браузере

Быстрый ответ

Безопасность заставляет нас отказаться от идеи прямого доступа к базе данных SQLite из JavaScript в браузере. Вместе с тем, есть решение — SQL.js. Это браузерная реализация SQLite в WebAssembly, которая позволяет взаимодействовать с базой данных посредством JavaScript. Вот пример, демонстрирующий SQL.js как интерфейс к SQLite для JavaScript:

JS
Скопировать код
// Подключаем библиотеку SQL.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/sql-wasm.js"></script>

<script>
// Инициализируем и создаём базу данных в памяти
initSqlJs({ locateFile: filename => `https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/${filename}` })
  .then(SQL => {
    let db = new SQL.Database(); // Создаём виртуальную базу данных
    db.exec("CREATE TABLE test (col1, col2); INSERT INTO test VALUES (1,111), (2,222);"); // Заполняем таблицу тестовыми данными
    let stmt = db.prepare("SELECT * FROM test WHERE col1 = ?"); // Готовим запрос на выборку данных по значению в первом столбце
    console.log(stmt.getAsObject({$col1:1})); // Выводим результат запроса в консоль
    stmt.free(); // Освобождаем ресурсы после выполнения запроса
  });
</script>

Прокси-серверы используются для долгосрочного хранения данных, и JavaScript обращается к SQLite посредством HTTP-запросов.

Кинга Идем в IT: пошаговый план для смены профессии

Клиентское хранилище: HTML5 IndexedDB и SQL.js

SQL.js имитирует работу SQLite через пользователя браузера. HTML5 IndexedDB — это платформа для работы с большим объёмом структурированных данных, включая файлы и блобы.

На заметку: Web SQL и его альтернативы

Web SQL больше не поддерживается в новых проектах, ибо его развитие остановлено. Его заменяет IndexedDB. W3C отказывается от поддержки Web SQL, предвидя окончательный переход к альтернативам.

Такие HTML5 API, как кэширование через манифесты приложений и сессионное хранилище, подойдут для офлайн работы с данными. Если вы используете Node.js, то node-sqlite3 предоставит прямой доступ к SQLite.

Выбор правильного хранилища: API хранения HTML5

Выбор подходящего API хранения зависит от ваших задач:

  • localStorage: Используется для простого хранения данных во время сессии.
  • sessionStorage: Сохраняет данные только на время одной сессии.
  • IndexedDB: Идеален для работы с большими объемами данных, которые должны сохраняться между сессиями.
  • Web Workers: Позволяют выполнять сложные операции с данными без зависания пользовательского интерфейса.

Визуализация

Markdown
Скопировать код
🌐 (JavaScript): Общается с HTML и отправляет сетевые запросы.
💾 (SQLite): Локальная база данных, которую обычно используют через сервер.
Markdown
Скопировать код
🌐🔗🚀🔗💾: API или сервер выступают в роли промежуточного слоя (🚀), связывая JavaScript и SQLite.

Инструментарий общего использования: Полезные библиотеки JavaScript

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

  • Dexie.js: Облегчает работу с IndexedDB.
  • PouchDB: Подходит для управления офлайн-данными и их синхронизации с облаком.
  • LocalForage: Асинхронный API, который работает с IndexedDB, WebSQL и localStorage.

Полезные материалы

  1. sql.js — Позволяет использовать SQLite в вашем проекте на JavaScript.
  2. GitHub – TryGhost/node-sqlite3: Привязки SQLite3 для Node.js — Привязки для работы SQLite с Node.js.
  3. web.dev — Гид по современной веб-разработке.
  4. Использование IndexedDB – Веб-API | MDN — Руководство по IndexedDB.
  5. Использование Web Workers – Веб-API | MDN — Как использовать Web Workers для улучшения производительности интерфейса.
  6. Dexie.js – Минималистичная обёртка для IndexedDB — Dexie.js упрощает работу с IndexedDB.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Почему нельзя напрямую получить доступ к базе данных SQLite из JavaScript в браузере?
1 / 5