¿Es posible acceder a una base de datos SQLite desde JavaScript?

97

Tengo un conjunto de archivos HTML y una base de datos SQLite, a la que me gustaría acceder desde el navegador, usando el esquema file: //. ¿Es posible acceder a la base de datos y crear consultas (y tablas) usando JavaScript?

Pal Szasz
fuente
3
Por file:esquema, ¿te refieres a la computadora en la que se ejecuta el navegador ?
3
Si. Actualmente tengo una herramienta que crea un informe (un montón de imágenes, archivos html y una base de datos sqlite). Simplemente puedo abrir este informe localmente (es decir, $ google-chrome report_out / index.html). Me gustaría hacer esto más interactivo, por lo que el javascript leería los datos generados de la base de datos y crearía estadísticas a partir de ellos.
Pal Szasz
Creo que sería posible hacer una conexión a través de un proxy WebSocket, pero la configuración tomaría bastante trabajo
hanshenrik

Respuestas:

41

De hecho, la respuesta es sí. Aquí hay un ejemplo de cómo puede hacer esto: http://html5doctor.com/introducing-web-sql-databases/

Lo malo es que tiene un soporte muy limitado por parte de los navegadores.

Más información aquí HTML5 IndexedDB, Web SQL Database y guerras de navegadores

PD: Como dijo @Christoph, Web SQL ya no está en mantenimiento activo y el Grupo de Trabajo de Aplicaciones Web no tiene la intención de mantenerlo más, así que busque aquí https://developer.mozilla.org/en-US/docs/IndexedDB .

SQL.js

EDITAR

Como @clentfort Dicho esto, se puede acceder a la base de datos SQLite con JavaScript en el cliente mediante el uso de SQL.js .

Minko Gechev
fuente
15
FYI websql ha sido abandonado ... Promocione indexedDB en su lugar.
Christoph
2
Pero, ¿es posible conectarse a la base de datos ya existente? Ya tengo un montón de datos que me gustaría procesar con javascript.
Pal Szasz
Puede ir con algunas cosas del lado del servidor o probar Node.JS para este codeforgeek.com/2014/07/node-sqlite-tutorial
Mrug
40

Puede usar SQL.js, que es la biblioteca SQLlite compilada en JavaScript y almacenar la base de datos en el almacenamiento local introducido en HTML5.

clentfort
fuente
9
el almacenamiento local es muy lento y torpe ... debería usar indexedDB en su lugar. No obstante, esta es una solución de trabajo, supongo.
Christoph
2
Si bien el almacenamiento local no es tan bueno como indexedDB, se admite prácticamente en todas partes. SQL.js no usa localstorage directamente (está en la memoria), por lo que solo tiene que leer / escribir en localstorage al inicio / apagado, incluso podría guardar el estado de SQL.js en un servidor. Bueno si desea que el usuario guarde los cambios específicamente, malo si un usuario que se va sin dejarlo guardar puede romper cosas.
Perkins
20

Respuesta actualizada

Mi bifurcación de sql.js ahora se ha fusionado en la versión original, en el repositorio de kriken .

La buena documentación también está disponible en el repositorio original.

Respuesta original (desactualizada)

Se debe utilizar la versión más reciente de sql.js . Es un puerto de sqlite 3.8, tiene una buena documentación y se mantiene activamente (por mí). Admite declaraciones preparadas y tipo de datos BLOB.

lovasoa
fuente
¿Puedo usar sql.js para acceder (insertar, actualizar, leer) la base de datos SQLite que está en el lado del servidor?
Abhee
@lovasoa Si uso sql.js, ¿puede una computadora nueva ejecutar mi sitio y hacer el CRUD en su base de datos (db almacenada en la misma ruta con la carpeta HTML) sin realizar ninguna instalación?
Jeaf Gilbert
1
@JeafGilbert No. sql.js opera exclusivamente en memoria, no se conserva nada. Si desea escribir el archivo de la base de datos en su sistema de archivos, tendrá que escribir esa lógica usted mismo.
lovasoa
4

Una de las características más interesantes de HTML5es la capacidad de almacenar datos localmente y permitir que la aplicación se ejecute sin conexión. Hay tres API diferentes que se ocupan de estas funciones y la elección de una depende de qué desea hacer exactamente con los datos que planea almacenar localmente:

  1. Almacenamiento web: para almacenamiento local básico con pares clave / valor
  2. Almacenamiento sin conexión: utiliza un manifiesto para almacenar en caché archivos completos para su uso sin conexión
  3. Base de datos web: para almacenamiento de bases de datos relacionales

Para obtener más referencia, consulte Introducción a las API de almacenamiento HTML5.

Y como usar

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

Talha
fuente
5
jeje, eche un vistazo a la segunda revisión de su respuesta, allí puede leerla;)
Christoph
1

¿Qué hay de usar algo como PouchDB? http://pouchdb.com/

theamoeba
fuente
como puede ver, el autor de la pregunta tiene el sqlite datos , y no ha proporcionado ejemplos ni un script para convertir SQLITE => POUCHDB
maxkoryukov
-2

En mi humilde opinión, la mejor manera es llamar a Python usando POST a través de AJAX y hacer todo lo que necesita hacer con la base de datos dentro de Python, luego devolver el resultado al javascript. El soporte de json y sqlite en Python es increíble y está 100% integrado en versiones de Python, incluso ligeramente recientes, por lo que no hay ningún problema de "instalar esto, instalar aquello". En Python:

import sqlite3
import json

... eso es todo lo que necesitas. Es parte de todas las distribuciones de Python.

@Sedrick Jefferson pidió ejemplos, así que (algo tarde) escribí aquí un intercambio independiente entre Javascript y Python.

fyngyrz
fuente
2
la pregunta contiene "... al que me gustaría acceder desde el navegador ..." . por lo que su respuesta (con python) está fuera del área (al menos hoy, cuando no es tan fácil ejecutar Python desde un navegador)
maxkoryukov