Можно ли получить доступ к базе данных SQLite из JavaScript?

97

У меня есть набор файлов HTML и база данных SQLite, к которой я хотел бы получить доступ из браузера, используя схему file: //. Можно ли получить доступ к базе данных и создавать запросы (и таблицы) с помощью JavaScript?

Пал Сас
источник
3
Под file:схемой вы имеете в виду компьютер, на котором работает браузер ?
3
Да. В настоящее время у меня есть инструмент, который создает отчет (набор изображений, html-файлы и база данных sqlite). Я могу просто открыть этот отчет локально (например, $ google-chrome report_out / index.html). Я хотел бы сделать это более интерактивным, чтобы javascript читал сгенерированные данные из базы данных и создавал из них статистику.
Pal Szasz
Я считаю, что можно было бы установить соединение через прокси-сервер WebSocket, но для его настройки потребовалось бы довольно много работы
hanshenrik

Ответы:

41

На самом деле ответ - да. Вот пример того, как это можно сделать: http://html5doctor.com/introduction-web-sql-databases/

Плохо то, что он очень ограничен в браузерах.

Подробнее здесь HTML5 IndexedDB, база данных Web SQL и войны браузеров

PS: Как сказал @Christoph, Web SQL больше не находится в активном обслуживании, и рабочая группа по веб-приложениям не намерена поддерживать его в дальнейшем, поэтому посмотрите здесь https://developer.mozilla.org/en-US/docs/IndexedDB .

SQL.js

РЕДАКТИРОВАТЬ

Как @clentfort сказал, вы можете получить доступ к базе данных SQLite с клиентской стороны JavaScript с помощью SQL.js .

Минько Гечев
источник
15
FYI websql был оставлен ... Вместо этого продвигайте indexedDB .
Christoph
2
Но можно ли подключиться к уже существующей базе данных? У меня уже есть много данных, которые я хотел бы обработать с помощью javascript.
Pal Szasz
Вы можете пойти с некоторыми вещами на стороне сервера или попробовать Node.JS для этого codeforgeek.com/2014/07/node-sqlite-tutorial
Mrug
40

Вы можете использовать SQL.js, который представляет собой библиотеку SQLlite, скомпилированную для JavaScript, и хранить базу данных в локальном хранилище, представленном в HTML5.

Clentfort
источник
9
локальное хранилище очень медленное и неуклюжее ... вместо этого вам следует использовать indexedDB. Тем не менее, я думаю, это рабочее решение.
Christoph
2
Хотя localstorage не так хорош, как indexedDB, он поддерживается практически везде. SQL.js не использует localstorage напрямую (он находится в памяти), поэтому вам нужно только читать / писать в localstorage при запуске / завершении работы, вы даже можете сохранить состояние SQL.js на сервере. Хорошо, если вы хотите, чтобы пользователь специально сохранял изменения, плохо, если пользователь, уйдя, не позволив сохранить, может что-то сломать.
Perkins
20

Актуальный ответ

Моя вилка sql.js теперь объединена с исходной версией в репозитории kriken .

Документация хорошо также доступны на исходном репо.

Оригинальный ответ (устарел)

Вы должны использовать новую версию sql.js . Это порт sqlite 3.8, имеет хорошую документацию и активно поддерживается мной. Он поддерживает подготовленные операторы и тип данных BLOB.

Lovasoa
источник
Могу ли я использовать sql.js для доступа (вставки, обновления, чтения) базы данных SQLite, которая находится на стороне сервера.
Abhee
@lovasoa Если я использую sql.js, может ли новый компьютер запустить мой сайт и выполнить CRUD в своей базе данных (база данных хранится в том же пути, что и папка HTML), не выполняя никаких установок?
Джеф Гилберт
1
@JeafGilbert Нет. Sql.js работает исключительно в памяти, ничего не сохраняется. Если вы хотите записать файл базы данных в свою файловую систему, вам придется написать эту логику самостоятельно.
lovasoa
4

Одна из наиболее интересных функций HTML5- возможность хранить данные локально и позволить приложению работать в автономном режиме. Есть три разных API, которые работают с этими функциями, и выбор одного из них зависит от того, что именно вы хотите делать с данными, которые планируете хранить локально:

  1. Веб-хранилище: для базового локального хранилища с парами ключ / значение
  2. Автономное хранилище: использует манифест для кэширования целых файлов для автономного использования.
  3. Веб-база данных: для хранения реляционной базы данных

Дополнительные сведения см. В разделе Знакомство с API хранилища HTML5.

И как пользоваться

http://cookbooks.adobe.com/post_Store_data_in_the_HTML5_SQLite_database-19115.html

Тальха
источник
5
хе-хе, взгляните на вторую редакцию вашего ответа, там вы можете ее прочитать;)
Кристоф
1

А как насчет использования чего-то вроде PouchDB? http://pouchdb.com/

Theamoeba
источник
как вы можете видеть, у автора вопроса есть база данных sqlite , и вы не предоставили примеры и скрипт для преобразования SQLITE => POUCHDB
maxkoryukov
-2

IMHO, лучший способ - вызвать Python с помощью POST через AJAX и сделать все, что вам нужно, с БД внутри Python, а затем вернуть результат в javascript. Поддержка json и sqlite в Python потрясающая, и она на 100% встроена даже в несколько недавних версий Python, поэтому нет никакой боли «установить это, установить это». В Python:

import sqlite3
import json

... это все, что вам нужно. Это часть каждого дистрибутива Python.

@Sedrick Jefferson попросил привести примеры, поэтому (с опозданием) я написал здесь отдельную встречу между Javascript и Python.

Фингырз
источник
2
вопрос содержит «... к которому я хотел бы получить доступ из браузера ...» . так что ваш ответ (с python) находится за
пределами