use*_*696 7 javascript indexeddb
我不知道我是对还是错.但据我所知,我无法手动创建版本更改事务.调用此方法的唯一方法是在打开索引数据库连接时更改版本号.如果这是正确的,在example1和example2中永远不会创建新的objectStore?
例1
function createObjectStore(name){
var request2 = indexedDB.open("existingDB");
request2.onupgradeneeded = function() {
var db = request2.result;
var store = db.createObjectStore(name);
};
}
Run Code Online (Sandbox Code Playgroud)
例题
function createObjectStore(name){
var request2 = indexedDB.open("existingDB");
request2.onsuccess = function() {
var db = request2.result;
var store = db.createObjectStore(name);
};
}
Run Code Online (Sandbox Code Playgroud)
示例3 - 这应该工作:
function createObjectStore(name){
var request2 = indexedDB.open("existingDB", 2);
request2.onupgradeneeded = function() {
var db = request2.result;
var store = db.createObjectStore(name);
};
}
Run Code Online (Sandbox Code Playgroud)
如果我想在一个数据库中创建多个objectStore,我怎么能在打开数据库之前获取/获取数据库版本?那么有没有办法自动化这个获取数据库版本号的过程?
除了使用onupgradeneeded事件处理程序之外,还有其他方法可以创建objectStore.
请帮忙.非常感谢.
编辑:
我遇到同样的问题:https: //groups.google.com/a/chromium.org/forum/#!topic/chromium-html5/0rfvwVdSlAs
Den*_*ski 15
您需要打开数据库以检查其当前版本并再次打开version + 1以触发升级.
以下是示例代码:
function CreateObjectStore(dbName, storeName) {
var request = indexedDB.open(dbName);
request.onsuccess = function (e){
var database = e.target.result;
var version = parseInt(database.version);
database.close();
var secondRequest = indexedDB.open(dbName, version+1);
secondRequest.onupgradeneeded = function (e) {
var database = e.target.result;
var objectStore = database.createObjectStore(storeName, {
keyPath: 'id'
});
};
secondRequest.onsuccess = function (e) {
e.target.result.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在onupgradeneeded事件中创建对象存储的唯一方法.您需要一个version_change事务才能更改架构.获取version_change事务的唯一方法是通过onupgradeneeded事件.
触发onupgradeneeded事件的唯一方法是以比当前版本的数据库更高的版本打开数据库.执行此操作的最佳方法是使用您需要使用的当前版本的数据库保持不变.每次需要更改数据库的架构时,都会增加此数字.然后在onupgradeneeded事件中,您可以检索当前版本的数据库.有了这个,您可以决定需要遵循哪个升级路径来获取最新的数据库模式.
我希望这回答了你的问题.
| 归档时间: |
|
| 查看次数: |
10025 次 |
| 最近记录: |