我创建了包含多个表和数据的 indexedDB 数据库。现在我想重新打开现有的 indexedDB 数据库并想从特定表中读取数据。请帮助我
问问题
1145 次
1 回答
3
IDB 版本号
在 IndexedDB 中,通常使用以下方式打开数据库(第一次打开或重新打开以进行修改)window.indexedDB.open(DB_NAME, DB_VERSION);
这里,DB_VERSION
是数据库的版本号,它决定了数据库是否会被打开以进行创建、修改或读取。
进一步阅读:
IDB 版本号的工作原理
- 第一次调用时
open
,通常会调用版本号为 1,这将触发onupgradeneeded
事件处理程序(此事件处理程序可用于“创建”数据库模式)和onsuccess
事件处理程序(此事件处理程序将用于保存数据库handler) 顺序,然后您可以使用数据库处理程序访问数据库。 - 下次您可以
open
使用升级/更高版本号调用时,将再次触发onupgradeneeded
事件处理程序(此事件处理程序可用于“创建”数据库模式)和onsuccess
事件处理程序(此事件处理程序将用于保存数据库处理程序)命令。 - 下次您可以
open
使用相同的版本号调用(重新打开以读取)时,将再次onsuccess
按顺序触发事件处理程序(此事件处理程序将用于保存数据库处理程序)。
请注意
onupgradeneeded
事件处理程序用于创建或修改数据库模式。onsuccess
事件处理程序用于获取将用于访问数据库的数据库处理程序。- 重要提示:通常您不应该
open
一次又一次地调用(直到您希望修改数据库模式),但是当您第一次调用时,您应该使用onsuccess
事件处理程序保存数据库处理程序,然后使用该数据库处理程序访问数据库。
用于理解的示例代码
在下面使用一次,然后查看警报,然后再次执行(浏览器上没有清除缓存,以便相同的数据库仍然存在),然后查看警报。
var request = window.indexedDB.open("SO", 1);
request.onblocked = function(event) {
alert("Error, cannot open database. Error message: Database in blocked state. " +
"Please close all open windows, clear browser cache and use a fresh window.");
};
//Callback for error upon DB open
request.onerror = function(event) {
alert('Error, cannot open database/Erreur, ne peut pas ouvrir la base de données');
};
//Callback for success upon DB open
request.onsuccess = function(event) {
alert('onsuccess. Save your database handler, for example something, DB_HANDLER = event.target.result;');
};
//Callback for onupgradeneeded upon DB open
request.onupgradeneeded = function(event) {
alert('onupgradeneeded. Create/modify the database schema');
};
于 2015-10-09T11:50:09.243 回答