是否可以从 JavaScript 访问 SQLite 数据库?

Posted

技术标签:

【中文标题】是否可以从 JavaScript 访问 SQLite 数据库?【英文标题】:Is it possible to access an SQLite database from JavaScript? 【发布时间】:2012-10-22 23:01:27 【问题描述】:

我有一组 html 文件和一个 SQLite 数据库,我想使用 file:// 方案从浏览器访问它们。是否可以使用 javascript 访问数据库并创建查询(和表)?

【问题讨论】:

file: 方案是指在运行 浏览器 的计算机上吗? 是的。目前我有一个创建报告的工具(一堆图像、html 文件和一个 sqlite 数据库)。我可以简单地在本地打开此报告(即 $ google-chrome report_out/index.html)。我想让它更具交互性,因此 javascript 将从数据库中读取生成的数据并从中创建统计信息。 我相信可以通过 WebSocket 代理建立连接,但设置起来需要相当多的工作 【参考方案1】:

其实答案是肯定的。这是一个示例:http://html5doctor.com/introducing-web-sql-databases/

不好的是浏览器对它的支持非常有限。

更多信息在这里HTML5 IndexedDB, Web SQL Database and browser wars

PS:正如@Christoph 所说的Web SQL is no longer in active maintenance and the Web Applications Working Group does not intend to maintain it further 所以请看这里https://developer.mozilla.org/en-US/docs/IndexedDB。

SQL.js

编辑

正如@clentfort 所说,您可以使用SQL.js 使用客户端JavaScript 访问SQLite 数据库。

【讨论】:

FYI websql 已被放弃...改为推广 indexedDB 但是可以连接到已经存在的数据库吗?我已经有一堆数据,我想用 javascript 处理。 你可以使用一些服务器端的东西,或者尝试使用 Node.JS codeforgeek.com/2014/07/node-sqlite-tutorial【参考方案2】:

您可以使用SQL.js,这是编译为 JavaScript 的 SQLlite 库,并将数据库存储在 HTML5 中引入的本地存储中。

【讨论】:

本地存储非常缓慢且笨拙...您应该改用 indexedDB。尽管如此,我猜这是一个可行的解决方案。 虽然 localstorage 不如 indexedDB 好,但几乎所有地方都支持它。 SQL.js 不直接使用 localstorage(它在内存中),因此您只需在启动/关闭时读取/写入 localstorage,您甚至可以将 SQL.js 的状态保存在服务器上。如果您希望用户专门保存更改,那就太好了,如果用户不保存就离开会破坏事情。【参考方案3】:

HTML5 中最有趣的功能之一是能够在本地存储数据并允许应用程序脱机运行。有 3 种不同的 API 可以处理这些功能,选择一种取决于您想要对计划在本地存储的数据执行什么操作:

    Web 存储:用于具有键/值对的基本本地存储 离线存储:使用清单缓存整个文件以供离线使用 使用 Web 数据库:用于关系数据库存储

更多参考请见Introducing the HTML5 storage APIs

以及如何使用

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

【讨论】:

呵呵,看看你的答案的第二版,在那里你可以阅读;)【参考方案4】:

最新答案

我的 sql.js 分支现已合并到 the original version, on kriken's repo。

good documentation 也可以在原始存储库中找到。

原始答案(已过时)

您应该使用newer version of sql.js。它是 sqlite 3.8 的一个端口,有一个 good documentation 并且由我积极维护。支持prepared statements和BLOB数据类型。

【讨论】:

我可以使用 sql.js 访问(插入、更新、读取)服务器端的 SQLite 数据库吗? @lovasoa 如果我使用 sql.js,是否可以在新计算机上运行我的网站并对数据库进行 CRUD(db 存储在与 HTML 文件夹相同的路径中)而不进行任何安装? @JeafGilbert No. sql.js 只在内存中运行,没有任何东西被持久化。如果你想在你的文件系统上写数据库文件,你必须自己写那个逻辑。【参考方案5】:

使用 PouchDB 之类的东西怎么样? http://pouchdb.com/

【讨论】:

如您所见,问题的作者拥有 sqlite 数据库,并且您没有提供用于转换 SQLITE => POUCHDB 的示例和脚本 换句话说,这应该是评论,而不是答案!【参考方案6】:

恕我直言,最好的方法是通过 AJAX 使用 POST 调用 Python,并在 Python 中对 DB 执行所有操作,然后将结果返回给 javascript。 Python 中的 json 和 sqlite 支持非常棒,它 100% 内置在 Python 的最新版本中,因此没有“安装这个,安装那个”的痛苦。在 Python 中:

import sqlite3
import json

...这就是你所需要的。它是每个 Python 发行版的一部分。

@Sedrick Jefferson 要求提供示例,所以(有点迟钝)我写了一个 stand-alone back-and-forth between Javascript and Python here.

【讨论】:

问题包含 "...我想从浏览器访问..."。所以你的答案(python)不在这个领域(至少在今天,从浏览器运行 python 并不容易)【参考方案7】:

最好用python和flask编码。如果您将 WebSQL 与 JavaScript 一起使用,那么它只会保存单个窗口的数据,而不是全球范围内的数据,因为它是一个浏览器 cookie。 Flask 是一个 python 网络服务器,一旦你用它创建一个页面,你就可以import sqlite3。另一种方法是使用php,但重点是使用JavaScript是个坏主意。

附:其实你可以试试loaclStorage我听说它可以保存数据只要你想保存。

【讨论】:

这是一个关于浏览器存储选项(例如 indexedDb)的 JavaScript 问题,因此建议不使用 JavaScript 并没有真正的帮助。

以上是关于是否可以从 JavaScript 访问 SQLite 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript 从 Web 应用程序访问设备指南针

从 JavaScript 访问会话变量

可以从 Javascript 文件访问 MVC ViewBag 对象吗?

JavaScript | 数据属性与访问器属性

使用JavaScript从JPEG访问原始YUV值

无法使用JavaScript从iTextSharp访问PDF文档页面/事件