JS--IndexedDB(非全面指南)

2019-04-28  本文已影响0人  小懒豆
一、 基本概念(中文版)
二、名词解释(中文版)
三、 IDBFactory对象(等价window.indexedDB)
var DBDeleteRequest = window.indexedDB.deleteDatabase("toDoList");

DBDeleteRequest.onerror = function(event) {
  console.log("Error deleting database.");
};
 
DBDeleteRequest.onsuccess = function(event) {
  console.log("Database deleted successfully");
    
  console.log(event.result); // should be undefined
};
四、IDBOpenDBRequest 接口

blocked事件
upgradeneeded事件

var db;

var request = window.indexedDB.open("library", 3);

request.onupgradeneeded = function(event) {
  db = request.result;
 
  db.onerror = function(errorEvent) {
    note.innerHTML += '<li>Error loading database.</li>';
  };

  if (event.oldVersion < 1) {
   
    var store = db.createObjectStore("books", {keyPath: "isbn"});
    var titleIndex = store.createIndex("by_title", "title", {unique: true});
    var authorIndex = store.createIndex("by_author", "author");
  }
  if (event.oldVersion < 2) {
   
    var bookStore = request.transaction.objectStore("books");
    var yearIndex = bookStore.createIndex("by_year", "year");
  }
  if (event.oldVersion < 3) {
    var magazines = db.createObjectStore("magazines");
    var publisherIndex = magazines.createIndex("by_publisher", "publisher");
    var frequencyIndex = magazines.createIndex("by_frequency", "frequency");
  }
};

request.onerror = function(event) {
  console.log(event)
};

request.onsuccess = function(event) {
  db = request.result;
};
五、 IDBDatabase对象
   // 键生成器和keyPath
    var objectStore = db.createObjectStore("names", { autoIncrement : true }); //键生成器
    var objectStore = db.createObjectStore("customers", { keyPath: "ssn" }); //keyPath
    var objectStore = db.createObjectStore("names", { keyPath: 'id', autoIncrement: true });
六、IDBTransacation对象(事务)
  // 开启一个事务
  var transaction = db.transaction(["customers"], "readwrite");
五、IDBObjectStore对象
方法 参数 返回 描述
add() value[, key] IDBRequest add方法只能插入数据。
clear () IDBRequest
getAll() [A key or IDBKeyRange[,在找到多个值时要返回的值的数量] IDBRequest
getAllKeys() 同上 IDBRequest
count() 参数可以是键,或键范围(key range) IDBRequest
createIndex() (in DOMString name, in DOMString keyPath, in optional boolean unique) IDBIndex 该方法只能从versionchange事务模式的回调方法中被调用。
delete 参数可以是键,或键范围(key range) IDBRequest
deleteIndex (in any DOMString indexName) void 该方法只能从versionchange事务模式的回调方法中被调用。
get (in any key) IDBRequest 不存在时就像存在记录时一样,但具有undefined值。
index (in DOMString name) IDBIndex
openCursor (in optional IDBKeyRange range, in optional unsigned short direction) IDBRequest
put (in any value, in optional any key) IDBRequest put方法是更新或插入方法。
六、IDBRequest接口
六、IDBIndex对象
六、IDBCursor对象(游标)

属性 direction key primaryKey source

// 首先,确定你已经在 request.onupgradeneeded 中创建了索引:
// objectStore.createIndex("name", "name",{ unique: false });
// 否则你将得到 DOMException。

var index = objectStore.index("name");

index.get("Donna").onsuccess = function(event) {
  alert("Donna's SSN is " + event.target.result.ssn);
};
index.openCursor().onsuccess = function(event) {
  var cursor = event.target.result;
  if (cursor) {
    // cursor.key 是一个 name, 就像 "Bill", 然后 cursor.value 是整个对象。
    alert("Name: " + cursor.key + ", SSN: " + cursor.value.ssn + ", email: " + cursor.value.email);
    cursor.continue();
  }
};

index.openKeyCursor().onsuccess = function(event) {
  var cursor = event.target.result;
  if (cursor) {
    // cursor.key 是一个 name, 就像 "Bill", 然后 cursor.value 是那个 SSN。
    // 没有办法可以得到存储对象的其余部分。
    alert("Name: " + cursor.key + ", SSN: " + cursor.value);
    cursor.continue();
  }
};
六、IDBKeyRange对象(指定游标的范围和方向)
// 仅匹配 "Donna"
var singleKeyRange = IDBKeyRange.only("Donna");

// 匹配所有超过“Bill”的,包括“Bill”
var lowerBoundKeyRange = IDBKeyRange.lowerBound("Bill");

// 匹配所有超过“Bill”的,但不包括“Bill”
var lowerBoundOpenKeyRange = IDBKeyRange.lowerBound("Bill", true);

// 匹配所有不超过“Donna”的,但不包括“Donna”
var upperBoundOpenKeyRange = IDBKeyRange.upperBound("Donna", true);

// 匹配所有在“Bill”和“Donna”之间的,但不包括“Donna”
var boundKeyRange = IDBKeyRange.bound("Bill", "Donna", false, true);

// 使用其中的一个键范围,把它作为 openCursor()/openKeyCursor 的第一个参数
index.openCursor(boundKeyRange).onsuccess = function(event) {
  var cursor = event.target.result;
  if (cursor) {
    // 当匹配时进行一些操作
    cursor.continue();
  }
};
objectStore.openCursor(boundKeyRange, "prev").onsuccess = function(event) {
  var cursor = event.target.result;
  if (cursor) {
    // 进行一些操作
    cursor.continue();
  }
};
index.openKeyCursor(null, IDBCursor.nextunique).onsuccess = function(event) {
  var cursor = event.target.result;
  if (cursor) {
    // Do something with the entries.
    cursor.continue();
  }
};
上一篇下一篇

猜你喜欢

热点阅读