indexedDB是一個事務型數據庫系統,同時也是基於javascript的面向對象的數據庫,它可以存儲大量結構化數據
首先是打開數據庫
var request=window.indexedDB.open(this.name)
//打開數據庫
request.onsuccess=function(event){ this.db=request.result }
//獲取數據庫實例
第一次創建數據庫時會觸發他的upgradeneeded方法
request.onupgradeneeded = function (event) {
// 獲取數據庫實例
var db = request.result;
// 檢查是否存在指定的表
if (!db.objectStoreNames.contains(_this.tableName)) {
// 如果不存在,則創建,並指定一個自增的id作爲查詢依據
db.createObjectStore(_this.tableName, {
keyPath: "id",
autoIncrement: true
});
}
};
獲得數據表實例
LocalDB.prototype.getStore = function () {
var transaction = this.db.transaction(this.tableName, 'readwrite');
var objStore = transaction.objectStore(this.tableName);
return objStore;
}
保存數據,支持添加和修改
LocalDB.prototype.set = function (data, callback) {
var objStore = this.getStore();
var request = data.id ? objStore.put(data) : objStore.add(data);
request.onsuccess = function (event) {
callback && callback(event.target.result);
};
}
刪除數據
LocalDB.prototype.remove = function (id) {
var objStore = this.getStore();
objStore.delete(id);
}
獲取數據
//獲取一條數據
LocalDB.prototype.get = function (id, callback) {
var objStore = this.getStore();
var request = objStore.get(id);
request.onsuccess = function (event) {
callback && callback(event.target.result);
}
}
// 獲取表中所有的數據
LocalDB.prototype.getAll = function (callback) {
var objStore = this.getStore();
// 打開數據遊標
var request = objStore.openCursor();
request.onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
// 如果遊標存在,執行回調並傳入當前數據行
callback && callback(cursor.value);
// 繼續下一行數據
cursor.continue();
}
}
}