是否有用于 localStorage 的 Javascript 库来模拟 SQLite

Posted

技术标签:

【中文标题】是否有用于 localStorage 的 Javascript 库来模拟 SQLite【英文标题】:Is there a Javascript library for localStorage to emulate SQLite 【发布时间】:2012-12-11 15:00:32 【问题描述】:

我有一个使用 SQLite 进行存储的应用程序。我们需要对其进行更改以使其能够与 Firefox 和其他浏览器一起使用。

LocalStorage 似乎是选择。但是,localStorage 不提供更复杂的 sql 功能(例如 OrderBy、GroupBy、表连接等)。

有人知道现有的 javascript 库可以与 localStorage 一起使用并使其行为更像 SQL 吗? -谢谢

【问题讨论】:

【参考方案1】:

您可以使用其中一种 javascript linq 实现。他们从普通的 javascript 对象/数组中获取数据,因此与 localstorage 的接口应该非常容易。

http://jslinq.codeplex.com/http://linqjs.codeplex.com/ 甚至http://www.thomasfrank.se/sqlike.html

他们的在线演示:http://secretgeek.net/JsLinq/(注意左上角的选项)

我不太确定插入/更新方面,但您可以肯定地使用它们进行一些不错的数据查询。

【讨论】:

非常感谢您的意见。 sqlike 似乎很完美,但是,它似乎只适用于数组。有你知道的 localStorage 之类的包装器吗? localstorage 可以很好地处理数组吗? localStorage['foo'] = [1,2,3];【参考方案2】:

如果您正在寻找替代 SQLLite 的 HTML5/JavaScript 关系数据库:SequelSphere

SequelSphere 是一个 Javascript 库,适用于所有现代浏览器和平台,并将其数据存储在 IndexedDB 和 LocalStorage 中(取决于浏览器支持的内容)。它可以轻松与任何第 3 方 RIA 框架集成,并提供“更改跟踪器”来帮助进行数据同步。

由于您询问了复杂的 SELECT 功能,因此可以在 SequelSphere 的网站上找到以下内容:Top 9 Cool SequelSphere Features

SequelSphere 最令人印象深刻的特点是它 革命性的 SQL 解析和执行引擎。它处理所有正常的 SELECT 特征和表达式,然后超越处理 LEFT, RIGHT 和 FULL 外连接。它不仅拥有无限的处理能力 子查询的嵌套,它在每个主要子句中处理它们(SELECT, 从,在哪里,加入,在,拥有,甚至是 GROUP BY!)。说到分组, 它还处理分组集、汇总、多维数据集和总计分组 职能。它甚至可以优雅地处理复杂的条件表达式 如:

(a,b) 不在 ((1, 2), (3, 4), (select c, d from tab))

在其中添加在运行时混合自定义、用户定义的能力 功能和第三方表(两个很酷的功能在他们自己 对),而且 SQL 引擎确实非同寻常。没有其他 SQL 引擎 可以做这些事情,更不用说 100% 在 JavaScript 中做到了 主要浏览器和平台。而且,我们不要忘记这一切 这以极快的速度:解析、规划和优化所有 发生亚毫秒。

完整披露:我是 SequelSphere 的一员,产品很棒。

【讨论】:

非常感谢您的意见。我看过这个,这似乎是一个很好的解决方案。有几件事,这是稳定的/经过测试的 - 它似乎是新的,它并没有说明它的测试效果如何。第二 - 一个应用程序可能卖多少钱? 最新的“稳定”版本,1.2.1 版非常稳定且经过良好测试。在发布之前,Edge Release 确实在所有主要浏览器上经过了无数(数千)次自动化测试。然而,Edge 是最前沿的。关于价格:发送电子邮件至“support@Sequ ... com”了解更多详情,或发送电子邮件至:“john.fowler@Sequ ... com” 链接已失效 --- SequelSphere 是否还存在于任何地方?【参考方案3】:

试试我的开源库https://bitbucket.org/ytkyaw/ydn-db/wiki/Home 它有IndexedDB、WebSQL 和网络存储。提供了丰富的查询选项。令人惊讶的易于使用。

【讨论】:

【参考方案4】:

试试sql.js。这是 SQLite 从原生 C 到纯 javascript 的直接移植。

【讨论】:

这是一个非常好的选择。【参考方案5】:

试试alasql.js。这是一个用纯 JavaScript 编写的 SQL 数据库。即使它没有与 locasStorage 一起使用的功能,但您可以在会话或更改前后轻松保存和恢复所需的所有数据。

这是一个如何将 Alasql 与 localStorage 一起使用的示例:

// Create database and table structure
var db = new alasql.Database();
db.exec('CREATE TABLE students (studentid INT, school STRING)');

// Load table data from localStorage if it exists or create new table
if(localStorage['students']) 
    db.tables.students.data = JSON.parse(localStorage['students']);
 else 
    db.tables.students.data = [
       studentid: 55, school: 'abc',
       studentid: 56, school: 'klm',
       studentid: 57, school: 'nyz'
    ];
    localStorage['students'] = JSON.stringify(db.tables.students.data);
;

// Add new student and save database
db.tables.students.data.push(student: 100, school:'qwe'); 
localStorage['students'] = JSON.stringify(db.tables.students.data);

// SQL-query
console.log(db.exec("SELECT * FROM students WHERE school > 'ght'"));

这个例子in Fiddle。

【讨论】:

现在 Alasql 内部支持 lacalStorage(参见jsFiddle中的示例

以上是关于是否有用于 localStorage 的 Javascript 库来模拟 SQLite的主要内容,如果未能解决你的问题,请参考以下文章

localStorage 的速度/成本

H5 的 sessionStorage和localStorage

localStorage 中 JWT 的替代品,用于在 react SPA 中自动登录?

XMLHttpRequest 替换元素不适用于 LocalStorage

检查 localStorage 项目是不是存在不起作用

判断浏览器是否支持.localStorage和sessionStorage的使用