繁体   English   中英

用于桥接IndexedDB和WebSQL的JavaScript库

[英]JavaScript Library to Bridge IndexedDB and WebSQL

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

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

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

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

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

另请参阅persistence.js

我已经为确切的目的编写了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);
}

询问

使用查询计算平均值

q = db.query('customer').average('age');
avg = q.fetch()

关键查询

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

交易

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

加密

可以使用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

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

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

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

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

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

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

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

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

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

我希望你(OP)对你接受的答案中建议的解决方案感到满意。

对于那些仍在寻找有能力的解决方案的人(可能包括也可能不包括OP的团队 ),请查看BakedGoods

它是一个库,它建立了一个统一的接口,可用于在所有本机和一些非本机客户端存储设施中进行存储操作。 它还保持了每个人为用户提供的灵活性和选择。

有了它,在任何数据库类型的支持下进行存储操作都是......

...为两种数据库类型指定适当的操作选项和等效配置:

//If the operation is a set(), and the referenced structures 
//don't exist, they will be created automatically.

var webSQLOptionsObj = {
    databaseName: "Example_DB",
    databaseDisplayName: "Example DB",
    databaseVersion: "",
    estimatedDatabaseSize: 1024 * 1024,
    tableData: {
        name: "Main",
        keyColumnName: "lastName",
        columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)"
    }, 
    tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"]
};

var indexedDBOptionsObj = {
    databaseName: "Example_DB",
    databaseVersion: 1,
    objectStoreData: {
        name: "Main",
        keyPath: lastName,
        autoIncrement: false
    },
    objectStoreIndexDataArray: [
        {name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false}
    ],
};

var optionsObj = {
    conductDisjointly: false, 
    webSQL: webSQLOptionsObj, 
    indexedDB: indexedDBOptionsObj
};

......并进行操作:

bakedGoods.set({
    data: [
        {value: {lastName: "Obama", firstName: "Barack"}}, 
        {value: {lastName: "Biden", firstName: "Joe"}}
    ],
    storageTypes: ["indexedDB", "webSQL"],
    options: optionsObj,
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

其简单的界面和无与伦比的存储设施支持是以缺乏对某些特定存储设施配置的支持为代价的。 例如,它不支持在具有多列主键的WebSQL表中进行存储操作。

因此,如果您大量使用这些类型的功能,您可能希望在其他地方寻找。

哦,为了完全透明,BakedGoods由你的真正维护:)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM