用于桥接IndexedDB和WebSQL的JavaScript库

Ped*_*ice 17 javascript web-sql indexeddb

我很好奇是否有一个库或项目为IndexedDB或WebSQL提供通用接口,具体取决于用户的浏览器支持.如果他们使用Chrome/Safari,请使用WebSQL,如果他们使用的是Firefox或Internet Explorer,请使用IndexedDB.

这个问题的海报似乎有自己开发的解决方案,但没有提供任何源代码.

Lee*_*iam 15

JasonCasden在他的演示文稿浏览器内存和我共享了大量的库/包装.这是清单:

lawnchair
persistence.js
persistJS
amplify.store
localStorageDB
https://github.com/axemclion/IndexedDB
realStorage
YUI3 CacheOffline
dojox.storage
DomSQL
Impel
ActiveJS ActiveRecord
JazzRecord
picnet.data.DataManager
ShinyCar
lscache
Kizzy
Artemia
microcache.js
Store.js
Run Code Online (Sandbox Code Playgroud)


Sam*_*ton 9

您可能想要使用Lawnchair,这是众所周知的,正如Guido Tapia在您链接的问题中所提到的那样.

要么是这样,要么使用他的picnet.data.DataManager解决方案.

另请参阅persistence.js.


Kya*_*Tun 8

我已经为确切的目的编写了YDN-DB.它是IndexedDB,WebSql和localStorage的数据库包装器,构建在闭包库的顶部.

目标

美丽的API,用于安全可靠的高性能大型Web应用程序.

特征

  • 支持IndexedDB,Web SQL和localStorage存储机制.
  • 经过良好测试的闭包库模块
  • 支持版本迁移,加密,查询事务.
  • 每个方法调用都是一个原子事务.所有方法都是异步的.
  • 遵循通常的javascript礼节,如:单个命名空间,没有全局,没有错误通配(除非我们在doc中告诉你),没有eval,参数化查询,这就是这个,编码错误抛出错误.
  • JQuery插件可用(参见下载部分).

基本用法

将最新的缩小JS脚本(请参阅下载部分)导入HTML文件.这将在全局范围内创建单个对象,调用ydn.db.Storage.

var db = new ydn.db.Storage('db name');

db.setItem('x', 'some value')

db.getItem('x').success(function(value) {
  console.log('x = ' + value);
}
Run Code Online (Sandbox Code Playgroud)

询问

使用查询计算平均值

q = db.query('customer').average('age');
avg = q.fetch()
Run Code Online (Sandbox Code Playgroud)

关键查询

q = db.query('customer', 'age').bound(18, 25, true).where('sex', '=', 'FEMALE').select('full_name')
young_girl_names = q.fetch()
Run Code Online (Sandbox Code Playgroud)

交易

p1 = db.key('player', 1);
db.transaction(function() {
   p1.get().success(function(p1_obj) {
        p1_obj.health += 10;
        p1.put(p123_obj);
   });
}, [p1]);
Run Code Online (Sandbox Code Playgroud)

加密

可以使用SHA-1密码选择性地加密字符串值数据.

db = new ydn.db.Store('store name')
db.setSecret(passphase); // generally send from server side upon login
db.setItem(key, value, 3600*1000); // data expire on one hour
db.getItem(key); // data will be decrypted using the provided passphase
Run Code Online (Sandbox Code Playgroud)


Gec*_*cko 7

看看这个:https://github.com/axemclion/IndexedDBShim

它是使用WebSql启用IndexedDB的polyfill.我使用它并且我认为它非常好,但是作为每个解决方案,它都有一些限制,尽管你几乎可以随意开发它而不会出现大问题.


小智 7

问题得到解答,我只是想分享更新.

2012年5月,JayData已经发布,它是JavaScript的统一数据访问库,有助于管理IndexedDB,WebSQL,SQLite,MongoDB,HTML5 localStorage数据库以及具有相同JavaScript语言查询的 Facebook,OData,WebAPI,YQL数据服务中的数据语法.

从WebSQL更改为IndexedDB意味着仅更改存储提供程序的类型:

var todoDB = new TodoDatabase({ 
    provider: 'webSql', databaseName: 'MyTodoDatabase' });

var todoDB = new TodoDatabase({ 
    provider: 'indexedDB', databaseName: 'MyTodoDatabase' });
Run Code Online (Sandbox Code Playgroud)

如果未指定提供程序,则库将按以下优先级顺序(WebSQL,IndexedDB,HTML5 localStorage)检测浏览器/设备的可用存储.

免责声明:我是开源JayData项目开发团队的成员