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

时间:2012-12-25 21:16:49

标签: javascript sql sqlite local-storage

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

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

有人知道一个Javascript现有的库可以使用localStorage并使其更像SQL吗? - 谢谢你

5 个答案:

答案 0 :(得分:6)

您可以使用其中一个javascript linq实现。他们从普通的javascript对象/数组中获取数据,因此应该与localstorage接口很多蛋糕。

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

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

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

答案 1 :(得分:4)

试试sql.js。这是SQLite从本地C到纯javascript的直接端口。

答案 2 :(得分:2)

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

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

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

  

SequelSphere最令人印象深刻的功能必须是它   革命性的SQL解析和执行引擎。它处理所有正常情况   SELECT功能和表达式,然后超越处理LEFT,   正确和外部连接。它不仅拥有无限的处理   嵌套子查询,它在每个主要子句中处理它们(SELECT,   FROM,WHERE,JOIN,ON,HAVING,甚至GROUP BY!)。说到分组,   它还处理分组集,汇总,多维数据集和总计分组   功能。它甚至优雅地处理复杂的条件表达式   如:

     

(a,b)不在((1,2),(3,4),(从标签中选择c,d))

     

将AT RUNTIME的功能添加到自定义,用户定义的混合中   功能和第三方表(两个很酷的功能在他们自己   右),SQL引擎真的非凡。没有其他SQL引擎   可以做这些事情,更不用说在所有的JavaScript中100%做到这一点   主流浏览器和平台。而且,我们不要忘记它会做到这一切   这速度极快:解析,规划和优化所有   发生在亚毫秒以内。

完全披露:我是SequelSphere的一部分,产品很棒。

答案 3 :(得分:2)

试试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

答案 4 :(得分:0)

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