时间:2021-07-01 10:21:17 帮助过:11人阅读
一旦你的浏览器支持IndexedDB,我们就可以打开它。你不能直接打开IndexedDB数据库。IndexedDB需要你创建一个请求来打开它。
var request = window.indexedDB.open("testDB", 2);
第一个参数是数据库的名称,第二个参数是数据库的版本号。版本号可以在升级数据库时用来调整数据库结构和数据。
但你增加数据库版本号时,会触发onupgradeneeded
事件,这时可能会出现成功、失败和阻止事件三种情况。
var db;
request.onerror = function(event){
console.log("打开DB失败", event);
}
request.onupgradeneeded = function(event){
console.log("Upgrading");
db = event.target.result;
var objectStore = db.createObjectStore("students", { keyPath : "rollNo" });
};
request.onsuccess = function(event){
console.log("成功打开DB");
db = event.target.result;
}
onupgradeneeded
事件在第一次打开页面初始化数据库时会被调用,或在当有版本号变化时。所以,你应该在onupgradeneeded
函数里创建你的存储数据。如果没有版本号变化,而且页面之前被打开过,你会获得一个onsuccess
事件。如果有错误发生时则触发onerror
事件。如果你之前没有关闭连接,则会触发onblocked
事件。
在上面的代码片段里,我们创建了一个Object Store,叫做“students”,用“rollNo”做数据键名。
为了往数据库里新增数据,我们首先需要创建一个事务,并要求具有读写权限。在indexedDB里任何的存取对象的操作都需要放在事务里执行。
var transaction = db.transaction(["students"],"readwrite");
transaction.oncomplete = function(event) {
console.log("Success");
};
transaction.onerror = function(event) {
console.log("Error");
};
var objectStore = transaction.objectStore("students");
objectStore.add({rollNo: rollNo, name: name});
删除跟新增一样,需要创建事务,然后调用删除接口,通过key删除对象。
db.transaction(["students"],"readwrite").objectStore("students").delete(rollNo);
我把语句合并到了一起,变得更简单,但效果是一样的。
往get()
方法里传入对象的key值,取出相应的对象。
var request = db.transaction(["students"],"readwrite").objectStore("students").get(rollNo);
request.onsuccess = function(event){
console.log("Name : "+request.result.name);
};
为了更新一个对象,首先要把它取出来,修改,然后再放回去。
var transaction = db.transaction(["students"],"readwrite");
var objectStore = transaction.objectStore("students");
var request = objectStore.get(rollNo);
request.onsuccess = function(event){
console.log("Updating : "+request.result.name + " to " + name);
request.result.name = name;
objectStore.put(request.result);
};
所有的源代码都在这里。如果有任何的问题,请留言,或通过 @歪脖骇客 给我私信
IndexedDB:浏览器里内置的数据库(转)
标签:发送 语句 nosql ken webkit ffline 版本 shm 结构