Est-il possible d'accéder à une base de données SQLite à partir de JavaScript?

92

J'ai un ensemble de fichiers HTML et une base de données SQLite, auxquels je voudrais accéder depuis le navigateur, en utilisant le schéma file: //. Est-il possible d'accéder à la base de données et de créer des requêtes (et des tables) à l'aide de JavaScript?

Pal Szasz
la source
2
Par file:schéma, voulez-vous dire sur l'ordinateur sur lequel s'exécute le navigateur ?
2
Oui. Actuellement, j'ai un outil qui crée un rapport (un tas d'images, des fichiers html et une base de données sqlite). Je peux simplement ouvrir ce rapport localement (c'est-à-dire $ google-chrome report_out / index.html). Je voudrais rendre cela plus interactif, afin que le javascript lise les données générées à partir de la base de données et en crée des statistiques.
Pal Szasz
Je pense qu'il serait possible d'établir une connexion via un proxy WebSocket, mais la configuration demanderait un peu de travail
hanshenrik

Réponses:

39

En fait, la réponse est oui. Voici un exemple comment vous pouvez faire cela: http://html5doctor.com/introducing-web-sql-databases/

La mauvaise chose est que c'est avec un support très limité par les navigateurs.

Plus d'informations ici HTML5 IndexedDB, Web SQL Database et browser wars

PS: Comme @Christoph l'a dit, Web SQL n'est plus en maintenance active et le groupe de travail sur les applications Web n'a pas l'intention de le maintenir davantage, alors regardez ici https://developer.mozilla.org/en-US/docs/IndexedDB .

SQL.js

ÉDITER

Comme @clentfort dit, vous pouvez accéder à la base de données SQLite avec JavaScript côté client en utilisant SQL.js .

Minko Gechev
la source
14
FYI websql a été abandonné ... Promouvoir indexedDB à la place.
Christoph
2
Mais est-il possible de se connecter à la base de données déjà existante? J'ai déjà un tas de données dedans, que je voudrais traiter avec javascript.
Pal Szasz
Vous pouvez aller avec des trucs côté serveur, ou essayer Node.JS pour ce codeforgeek.com/2014/07/node-sqlite-tutorial
Mrug
38

Vous pouvez utiliser SQL.js qui est la bibliothèque SQLlite compilée en JavaScript et stocker la base de données dans le stockage local introduit dans HTML5.

Clentfort
la source
7
le stockage local est très lent et maladroit ... vous devriez utiliser indexedDB à la place. Néanmoins, c'est une solution de travail je suppose.
Christoph
2
Bien que localstorage ne soit pas aussi agréable que indexedDB, il est pris en charge à peu près partout. SQL.js n'utilise pas directement localstorage (il est en mémoire), vous n'avez donc qu'à lire / écrire dans localstorage au démarrage / à l'arrêt, vous pouvez même enregistrer l'état de SQL.js sur un serveur. Bon si vous voulez que l'utilisateur enregistre spécifiquement les modifications, mauvais si un utilisateur qui quitte sans le laisser enregistrer peut casser des choses.
Perkins
20

Réponse à jour

Mon fork de sql.js a maintenant été fusionné dans la version originale, sur le repo de kriken .

La bonne documentation est également disponible sur le dépôt d'origine.

Réponse originale (obsolète)

Vous devez utiliser la version plus récente de sql.js . C'est un port de sqlite 3.8, a une bonne documentation et est activement maintenu (par moi). Il prend en charge les instructions préparées et le type de données BLOB.

Lovasoa
la source
Puis-je utiliser sql.js pour accéder (insérer, mettre à jour, lire) la base de données SQLite qui se trouve côté serveur.
Abhee
@lovasoa Si j'utilise sql.js, un nouvel ordinateur peut-il exécuter mon site et effectuer le CRUD dans sa base de données (base de données stockée dans le même chemin avec le dossier HTML) sans effectuer aucune installation?
Jeaf Gilbert
1
@JeafGilbert Non. Sql.js fonctionne exclusivement en mémoire, rien n'est conservé. Si vous souhaitez écrire le fichier de base de données sur votre système de fichiers, vous devrez écrire vous-même cette logique.
lovasoa
4

L'une des fonctionnalités les plus intéressantes de HTML5est la possibilité de stocker des données localement et de permettre à l'application de s'exécuter hors ligne. Il existe trois API différentes qui traitent de ces fonctionnalités et en choisir une dépend de ce que vous voulez faire exactement avec les données que vous prévoyez de stocker localement:

  1. Stockage Web: pour le stockage local de base avec des paires clé / valeur
  2. Stockage hors ligne: utilise un manifeste pour mettre en cache des fichiers entiers pour une utilisation hors ligne
  3. Base de données Web: pour le stockage de base de données relationnelle

Pour plus d'informations, consultez Présentation des API de stockage HTML5

Et comment utiliser

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

Talha
la source
5
hehe, jetez un oeil à la deuxième révision de votre réponse, là vous pouvez la lire;)
Christoph
1

Qu'en est-il d'utiliser quelque chose comme PouchDB? http://pouchdb.com/

theamoeba
la source
comme vous pouvez le voir, l'auteur de la question a la base de données sqlite , et vous n'avez pas fourni d'exemples et de script pour la conversion de SQLITE => POUCHDB
maxkoryukov
-2

À mon humble avis, le meilleur moyen est d'appeler Python en utilisant POST via AJAX et de faire tout ce que vous devez faire avec la base de données dans Python, puis de renvoyer le résultat au javascript. Le support de json et sqlite en Python est génial et il est 100% intégré dans les versions même légèrement récentes de Python, donc il n'y a pas de problème "installer ceci, installer cela". En Python:

import sqlite3
import json

... c'est tout ce dont vous avez besoin. Cela fait partie de chaque distribution Python.

@Sedrick Jefferson a demandé des exemples, donc (un peu tardivement) j'ai écrit ici un va-et-vient autonome entre Javascript et Python.

fyngyrz
la source
1
la question contient "... auquel je souhaite accéder depuis le navigateur ..." . donc votre réponse (avec python) est hors de
propos