正如其他人指出的那样,由于这个问题已经被问过了,webSQL已被弃用,而IndexedDB实现现在存在于所有主要的浏览器供应商中。
因此,对于任何可能面临同样决策的人来说,选择IndexedDB。
这里其他人也正确地暗示了,不必在两种数据库类型之间做出选择。可以简单地选择(或创建)一个利用客户端机器上可用的任一数据库的库。
如果您正在寻找这样的库,请查看BakedGoods。它建立了一个统一接口,可用于在所有本地和一些非本地客户存储设施中进行存储操作。它还保持了用户获得的灵活性和选项。
通过它,在支持的数据库类型中进行存储操作只是...指定适当的操作选项和等效配置,针对两种数据库类型。
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由这个家伙维护 :)。