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

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

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

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

【问题讨论】:

    标签: javascript sql sqlite local-storage


    【解决方案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中的示例
      猜你喜欢
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      相关资源
      最近更新 更多