我正在使用javascript执行此操作。我想将数据添加到数据库(indexedDB)。数据将以json的形式来自网络服务,而我正在遍历它,并将其添加到具有keyPath的objectStore中。
[当我查看来自Web服务的数据时,我有一个186个对象的数组,但是当我从indexedDB中读取数据时,我有151个。当我去检查数据库以查看数据是否在那里时,不是吗? t ...所以我的add函数必须要进行一些操作。
这是我的代码:
使用objectStore打开数据库:
let db;
let request = window.indexedDB.open("WHS", 4);
request.onerror = function(event) {
console.log(event.target.errorCode);
};
request.onsuccess = function(event) {
db = event.target.result;
};
request.onupgradeneeded = function(event) {
let db = event.target.result;
let palletStore = db.createObjectStore("pallets", { keyPath: "palletno" });
};
将数据传递到我的函数后添加数据:
function addPalletsToIDB(pallets) {
let transaction = db.transaction(["pallets"], "readwrite");
let objectStore = transaction.objectStore("pallets");
$.each(pallets, function(i, pallet) {
let request = objectStore.put(pallet);
})
request.onsuccess = function(event) {
console.log('Added pallets : ', event.target.response);
};
transaction.oncomplete = function() {
getPalletDataFromIDB();
}
};
读取数据:
function getPalletDataFromIDB() {
palletsFromIDB = [];
let transaction = db.transaction(["pallets"], IDBTransaction.READ);
transaction.oncomplete = function(event) {
console.log(event);
};
transaction.onerror = function(event) {
console.log(event.type);
};
let objectStore = transaction.objectStore("pallets");
objectStore.openCursor().onsuccess = function(event) {
let cursor = event.target.result;
if (cursor) {
palletsFromIDB.push(cursor.value);
cursor.continue();
}
transaction.oncomplete = function() {
console.log("[palletsFromIDB] ", palletsFromIDB);
toastr.info("Got pallets");
};
};
};
来自网络服务:{托盘:Array(186)}来自indexedDB:[palletsFromIDB](151)
一种方法是在json中创建一个唯一的keyPath,并在索引数据库中创建该keyPath。