Czy jest możliwy dostęp do bazy danych SQLite z JavaScript?

97

Mam zestaw plików HTML i bazę danych SQLite, do której chciałbym uzyskać dostęp z przeglądarki, korzystając ze schematu file: //. Czy można uzyskać dostęp do bazy danych i tworzyć zapytania (i tabele) za pomocą JavaScript?

Pal Szasz
źródło
3
Mówiąc file:schematycznie, masz na myśli komputer, na którym działa przeglądarka ?
3
Tak. Obecnie mam narzędzie, które tworzy raport (kilka zdjęć, pliki html i baza danych sqlite). Mogę po prostu otworzyć ten raport lokalnie (np. $ Google-chrome report_out / index.html). Chciałbym, aby było to bardziej interaktywne, aby javascript odczytywał wygenerowane dane z bazy danych i tworzył z nich statystyki.
Pal Szasz
wierzę, że nawiązanie połączenia przez serwer proxy WebSocket byłoby możliwe, ale konfiguracja wymagałaby sporo pracy
hanshenrik

Odpowiedzi:

41

Właściwie odpowiedź brzmi: tak. Oto przykład, jak możesz to zrobić: http://html5doctor.com/introducing-web-sql-databases/

Złe jest to, że ma bardzo ograniczone wsparcie ze strony przeglądarek.

Więcej informacji tutaj HTML5 IndexedDB, Web SQL Database i wojny przeglądarek

PS: Jak powiedział @Christoph, Web SQL nie jest już aktywnie utrzymywany, a grupa robocza ds. Aplikacji internetowych nie zamierza dalej go utrzymywać, więc spójrz tutaj https://developer.mozilla.org/en-US/docs/IndexedDB .

SQL.js

EDYTOWAĆ

Jak @clentfort powiedział, można uzyskać dostęp do bazy danych SQLite z JavaScript po stronie klienta za pomocą SQL.js .

Minko Gechev
źródło
15
FYI websql zostało porzucone ... Zamiast tego promuj indexedDB .
Christoph
2
Ale czy można połączyć się z już istniejącą bazą danych? Mam już w nim sporo danych, które chciałbym przetworzyć za pomocą javascript.
Pal Szasz
Możesz przejść do rzeczy po stronie serwera lub wypróbować Node.JS dla tego codeforgeek.com/2014/07/node-sqlite-tutorial
Mrug
40

Możesz użyć SQL.js, który jest biblioteką SQLlite skompilowaną do JavaScript i przechowywać bazę danych w lokalnym magazynie wprowadzonym w HTML5.

clentfort
źródło
9
lokalna pamięć masowa jest bardzo powolna i niezgrabna ... zamiast tego powinieneś użyć indexedDB. Mimo wszystko jest to chyba działające rozwiązanie.
Christoph
2
Chociaż localstorage nie jest tak przyjemna, jak indexedDB, jest obsługiwana prawie wszędzie. SQL.js nie używa bezpośrednio magazynu lokalnego (jest w pamięci), więc musisz tylko czytać z / zapisywać do magazynu lokalnego podczas uruchamiania / zamykania, możesz nawet zapisać stan SQL.js na serwerze. Dobrze, jeśli chcesz, aby użytkownik specjalnie zapisywał zmiany, źle, jeśli użytkownik odejdzie bez pozwolenia na zapisanie, może zepsuć sytuację.
Perkins
20

Aktualna odpowiedź

Moje rozwidlenie sql.js zostało teraz włączone do oryginalnej wersji w repozytorium krikena .

Dokumentacja dobry jest również dostępna na oryginalnym repo.

Oryginalna odpowiedź (nieaktualna)

Należy użyć nowszej wersji sql.js . Jest to port sqlite 3.8, ma dobrą dokumentację i jest aktywnie utrzymywany (przeze mnie). Obsługuje przygotowane zestawienia i typ danych BLOB.

lovasoa
źródło
Czy mogę używać sql.js do uzyskiwania dostępu (wstawianie, aktualizowanie, odczytywanie) bazy danych SQLite, która jest po stronie serwera.
Abhee,
@lovasoa Jeśli używam sql.js, czy nowy komputer może uruchomić moją witrynę i wykonać CRUD do swojej bazy danych (baza danych przechowywana w tej samej ścieżce z folderem HTML) bez wykonywania jakichkolwiek instalacji?
Jeaf Gilbert,
1
@JeafGilbert nr sql.js działa wyłącznie w pamięci, nic nie jest utrwalane. Jeśli chcesz zapisać plik bazy danych w swoim systemie plików, będziesz musiał sam napisać tę logikę.
lovasoa
4

Jedną z najbardziej interesujących funkcji w programie HTML5jest możliwość lokalnego przechowywania danych i umożliwienia działania aplikacji w trybie offline. Istnieją trzy różne interfejsy API, które obsługują te funkcje, a wybór jednego zależy od tego, co dokładnie chcesz zrobić z danymi, które planujesz przechowywać lokalnie:

  1. Pamięć internetowa: do podstawowej pamięci lokalnej z parami klucz / wartość
  2. Pamięć w trybie offline: używa manifestu do buforowania całych plików do użytku w trybie offline
  3. Baza danych sieci Web: do przechowywania relacyjnych baz danych

Aby uzyskać więcej informacji, zobacz Wprowadzenie do interfejsów API magazynu HTML5

I jak używać

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

Talha
źródło
5
hehe, spójrz na drugą wersję swojej odpowiedzi, tam możesz ją przeczytać;)
Christoph
1

A co z używaniem czegoś takiego jak PouchDB? http://pouchdb.com/

theamoeba
źródło
jak widać autor pytania ma sqlite DB, a nie podałeś przykładów i skryptu do konwersji SQLITE => POUCHDB
maxkoryukov
-2

IMHO, najlepszym sposobem jest wywołanie Pythona za pomocą POST przez AJAX i zrobienie wszystkiego, co musisz zrobić z bazą danych w Pythonie, a następnie zwrócenie wyniku do javascript. Obsługa json i sqlite w Pythonie jest niesamowita i jest w 100% wbudowana nawet w nieco nowszą wersję Pythona, więc nie ma bólu „zainstaluj to, zainstaluj to”. W Pythonie:

import sqlite3
import json

... to wszystko, czego potrzebujesz. Jest częścią każdej dystrybucji Pythona.

@Sedrick Jefferson poprosił o przykłady, więc (nieco spóźniony) napisałem tutaj samodzielne połączenie między Javascriptem a Pythonem.

fyngyrz
źródło
2
pytanie zawiera „… do którego chciałbym uzyskać dostęp z przeglądarki…” . więc twoja odpowiedź (z python) jest poza obszarem (przynajmniej dzisiaj, kiedy nie jest tak łatwo uruchomić Pythona z przeglądarki)
maxkoryukov