Ist es möglich, über JavaScript auf eine SQLite-Datenbank zuzugreifen?

90

Ich habe eine Reihe von HTML-Dateien und eine SQLite-Datenbank, auf die ich über den Browser mit dem Schema file: // zugreifen möchte. Ist es möglich, mit JavaScript auf die Datenbank zuzugreifen und Abfragen (und Tabellen) zu erstellen?

Pal Szasz
quelle
2
Mit file:Schema meinen Sie auf dem Computer, auf dem der Browser läuft?
2
Ja. Derzeit habe ich ein Tool, das einen Bericht erstellt (eine Reihe von Bildern, HTML-Dateien und eine SQLite-Datenbank). Ich kann diesen Bericht einfach lokal öffnen (dh $ google-chrome report_out / index.html). Ich möchte dies interaktiver gestalten, damit das Javascript die generierten Daten aus der Datenbank liest und daraus Statistiken erstellt.
Pal Szasz
Ich glaube, es wäre möglich, eine Verbindung über einen WebSocket-Proxy herzustellen, aber die Einrichtung würde ziemlich viel Arbeit
erfordern

Antworten:

39

Eigentlich lautet die Antwort ja. Hier ist ein Beispiel, wie Sie dies tun können: http://html5doctor.com/introducing-web-sql-databases/

Das Schlimme ist, dass es von den Browsern nur sehr eingeschränkt unterstützt wird.

Weitere Informationen finden Sie hier HTML5 IndexedDB, Web SQL Database und Browser Wars

PS: Wie @Christoph sagte, befindet sich Web SQL nicht mehr in der aktiven Wartung und die Arbeitsgruppe für Webanwendungen beabsichtigt nicht, es weiter zu warten. Schauen Sie hier https://developer.mozilla.org/en-US/docs/IndexedDB .

SQL.js

BEARBEITEN

Wie @clentfort sagte, können Sie mit clientseitigem JavaScript mithilfe von SQL.js auf die SQLite-Datenbank zugreifen .

Minko Gechev
quelle
14
FYI websql wurde aufgegeben ... Bewerben Sie stattdessen indexedDB .
Christoph
2
Aber ist es möglich, eine Verbindung zur bereits vorhandenen Datenbank herzustellen? Ich habe bereits eine Reihe von Daten darin, die ich mit Javascript verarbeiten möchte.
Pal Szasz
Sie können mit einigen serverseitigen Sachen gehen, oder versuchen Sie Node.JS für dieses codeforgeek.com/2014/07/node-sqlite-tutorial
Mrug
38

Sie können SQL.js verwenden, die in JavaScript kompilierte SQLlite- Bibliothek, und die Datenbank in dem in HTML5 eingeführten lokalen Speicher speichern.

Clentfort
quelle
7
Der lokale Speicher ist sehr langsam und ungeschickt. Sie sollten stattdessen indexedDB verwenden. Trotzdem ist dies eine funktionierende Lösung, denke ich.
Christoph
2
Localstorage ist zwar nicht so gut wie indexedDB, wird aber fast überall unterstützt. SQL.js verwendet localstorage nicht direkt (es befindet sich im Speicher), sodass Sie beim Starten / Herunterfahren nur von / in localstorage lesen / schreiben müssen. Sie können sogar den Status von SQL.js auf einem Server speichern. Gut, wenn der Benutzer Änderungen gezielt speichern soll, schlecht, wenn ein Benutzer, der das Programm verlässt, ohne es speichern zu lassen, Probleme verursachen kann.
Perkins
20

Aktuelle Antwort

Meine Gabelung von sql.js wurde jetzt auf krikens Repo in die Originalversion übernommen .

Die gute Dokumentation ist auch auf dem Original-Repo verfügbar.

Ursprüngliche Antwort (veraltet)

Sie sollten die neuere Version von sql.js verwenden . Es ist eine Portierung von SQLite 3.8, hat eine gute Dokumentation und wird (von mir) aktiv gepflegt. Es unterstützt vorbereitete Anweisungen und den BLOB-Datentyp.

Lovasoa
quelle
Kann ich sql.js für den Zugriff auf die serverseitige SQLite-Datenbank (Einfügen, Aktualisieren, Lesen) verwenden?
Abhee
@lovasoa Wenn ich sql.js verwende, kann ein neuer Computer meine Site ausführen und die CRUD für seine Datenbank ausführen (Datenbank im selben Pfad wie HTML-Ordner gespeichert), ohne Installationen durchzuführen?
Jeaf Gilbert
1
@JeafGilbert Nr. Sql.js arbeitet ausschließlich im Speicher, nichts bleibt bestehen. Wenn Sie die Datenbankdatei in Ihr Dateisystem schreiben möchten, müssen Sie diese Logik selbst schreiben.
Lovasoa
4

Eine der interessantesten Funktionen HTML5ist die Möglichkeit, Daten lokal zu speichern und die Anwendung offline auszuführen. Es gibt drei verschiedene APIs, die sich mit diesen Funktionen befassen. Die Auswahl einer API hängt davon ab, was genau Sie mit den Daten tun möchten, die Sie lokal speichern möchten:

  1. Webspeicher: Für lokalen Basisspeicher mit Schlüssel / Wert-Paaren
  2. Offline-Speicher: Verwendet ein Manifest, um ganze Dateien für die Offline-Verwendung zwischenzuspeichern
  3. Webdatenbank: Zur relationalen Datenbankspeicherung

Weitere Informationen finden Sie unter Einführung in die HTML5-Speicher-APIs

Und wie man es benutzt

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

Talha
quelle
5
hehe, werfen Sie einen Blick in die zweite Revision Ihrer Antwort, dort können Sie sie lesen;)
Christoph
1

Was ist mit so etwas wie PouchDB? http://pouchdb.com/

theamoeba
quelle
wie Sie den Autor der Frage sehen kann , hat die SQLite - DB, und Sie haben für die Umwandlung von SQLITE => POUCHDB keine Beispiele und Skript zur Verfügung gestellt
maxkoryukov
-2

IMHO ist der beste Weg, Python mit POST über AJAX aufzurufen und alles zu tun, was Sie mit der Datenbank in Python tun müssen, und dann das Ergebnis an das Javascript zurückzugeben. Die Unterstützung von JSON und SQLite in Python ist fantastisch und zu 100% in neuere Versionen von Python integriert. Es gibt also keine Probleme, dies zu installieren. In Python:

import sqlite3
import json

... das ist alles was du brauchst. Es ist Teil jeder Python-Distribution.

@Sedrick Jefferson hat nach Beispielen gefragt, daher habe ich (etwas verspätet) hier ein eigenständiges Hin und Her zwischen Javascript und Python geschrieben.

Fyngyrz
quelle
1
Die Frage enthält "... auf die ich über den Browser zugreifen möchte ..." . Ihre Antwort (mit python) liegt also außerhalb des Bereichs (zumindest heute, wenn es nicht so einfach ist, Python über einen Browser
auszuführen