是否有用于 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的主要内容,如果未能解决你的问题,请参考以下文章
H5 的 sessionStorage和localStorage
localStorage 中 JWT 的替代品,用于在 react SPA 中自动登录?