É possível acessar um banco de dados SQLite de JavaScript?

92

Tenho um conjunto de arquivos HTML e um banco de dados SQLite, que gostaria de acessar do navegador, usando o esquema file: //. É possível acessar o banco de dados e criar consultas (e tabelas) usando JavaScript?

Pal Szasz
fonte
2
Por file:esquema, você quer dizer no computador em que o navegador está sendo executado?
2
Sim. Atualmente tenho uma ferramenta que cria um relatório (um monte de imagens, arquivos html e um banco de dados sqlite). Posso simplesmente abrir este relatório localmente (ou seja, $ google-chrome report_out / index.html). Eu gostaria de tornar isso mais interativo, para que o javascript pudesse ler os dados gerados no banco de dados e criar estatísticas a partir dele.
Pal Szasz
Eu acredito que seria possível fazer uma conexão por meio de um proxy WebSocket, mas seria um pouco trabalhoso para configurar
hanshenrik

Respostas:

39

Na verdade, a resposta é sim. Aqui está um exemplo de como você pode fazer isso: http://html5doctor.com/introducing-web-sql-databases/

O ruim é que ele tem suporte muito limitado pelos navegadores.

Mais informações aqui HTML5 IndexedDB, banco de dados Web SQL e guerras de navegador

PS: Como @Christoph disse que o Web SQL não está mais em manutenção ativa e o Grupo de Trabalho de Aplicativos da Web não pretende mantê-lo mais , veja aqui https://developer.mozilla.org/en-US/docs/IndexedDB .

SQL.js

EDITAR

Como @clentfort disse, você pode acessar banco de dados SQLite com client-side JavaScript usando SQL.js .

Minko Gechev
fonte
14
Para sua informação, o websql foi abandonado ... Promova indexedDB em seu lugar.
Christoph
2
Mas é possível se conectar ao banco de dados já existente? Já tenho um monte de dados nele, que gostaria de processar com javascript.
Pal Szasz
Você pode ir com algumas coisas do lado do servidor, ou tentar Node.JS para este codeforgeek.com/2014/07/node-sqlite-tutorial
Mrug
38

Você pode usar o SQL.js, que é o lib SQLlite compilado para JavaScript e armazenar o banco de dados no armazenamento local introduzido no HTML5.

Clentfort
fonte
7
o armazenamento local é muito lento e desajeitado ... você deve usar indexedDB em seu lugar. No entanto, esta é uma solução funcional, eu acho.
Christoph
2
Embora localstorage não seja tão bom quanto indexedDB, ele é compatível em quase todos os lugares. SQL.js não usa localstorage diretamente (está na memória), então você só precisa ler / gravar em localstorage na inicialização / desligamento, você pode até salvar o estado do SQL.js em um servidor. Bom se você deseja que o usuário salve especificamente as alterações, ruim se um usuário sair sem permitir que ele salve possa quebrar as coisas.
Perkins de
20

Resposta atualizada

Meu fork do sql.js foi agora mesclado com a versão original, no repositório de Kriken .

A boa documentação também está disponível no repositório original.

Resposta original (desatualizada)

Você deve usar a versão mais recente do sql.js . É uma porta do sqlite 3.8, tem uma boa documentação e é mantida ativamente (por mim). Ele suporta instruções preparadas e tipo de dados BLOB.

Lovasoa
fonte
Posso usar sql.js para acessar (inserir, atualizar, ler) banco de dados SQLite que está no lado do servidor.
Abhee
@lovasoa Se eu usar sql.js, um computador novo pode executar meu site e fazer o CRUD em seu banco de dados (db armazenado no mesmo caminho da pasta HTML) sem fazer nenhuma instalação?
Jeaf Gilbert
1
@JeafGilbert No. sql.js opera exclusivamente na memória, nada é persistido. Se você quiser gravar o arquivo de banco de dados em seu sistema de arquivos, terá que escrever essa lógica você mesmo.
lovasoa
4

Um dos recursos mais interessantes do HTML5é a capacidade de armazenar dados localmente e permitir que o aplicativo seja executado offline. Existem três APIs diferentes que lidam com esses recursos e escolher uma depende do que exatamente você deseja fazer com os dados que pretende armazenar localmente:

  1. Armazenamento da Web: para armazenamento local básico com pares de chave / valor
  2. Armazenamento offline: usa um manifesto para armazenar arquivos inteiros em cache para uso offline
  3. Banco de dados da Web: para armazenamento de banco de dados relacional

Para obter mais referências, consulte Apresentando as APIs de armazenamento HTML5

E como usar

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

Talha
fonte
5
hehe, dê uma olhada na segunda revisão da sua resposta, lá você pode ler;)
Christoph
1

Que tal usar algo como o PouchDB? http://pouchdb.com/

theamoeba
fonte
como você pode ver, o autor da pergunta tem o banco de dados sqlite , e você não forneceu exemplos e script para converter SQLITE => POUCHDB
maxkoryukov
-2

IMHO, a melhor maneira é chamar o Python usando POST via AJAX e fazer tudo o que você precisa fazer com o banco de dados dentro do Python, depois retornar o resultado para o javascript. O suporte a json e sqlite em Python é incrível e é 100% integrado, mesmo nas versões ligeiramente recentes do Python, então não há nenhuma dor de "instalar isso, instalar aquilo". Em Python:

import sqlite3
import json

... isso é tudo que você precisa. Faz parte de toda distribuição Python.

@Sedrick Jefferson pediu exemplos, então (um tanto tardiamente) eu escrevi um vaivém autônomo entre Javascript e Python aqui.

Fyngyrz
fonte
1
a pergunta contém "... que eu gostaria de acessar do navegador ..." . portanto, sua resposta (com python) está fora de questão (pelo menos hoje, quando não é tão fácil executar o Python em um navegador)
maxkoryukov