const databaseName = 'shop-cart'
const tableName = 'goods'
export default new class IndexDB {
constructor() {
this.connectDB()
}
connectDB() {
const request = window.indexedDB.open(databaseName);
request.onerror = () => {
console.log('数据库打开报错');
};
request.onsuccess = () => {
this.db = request.result;
console.log('数据库打开成功');
};
request.onupgradeneeded = (event) => {
console.log('数据库onupgradeneeded');
this.db = event.target.result;
if (!this.db.objectStoreNames.contains(tableName)) {
const objectStore = this.db.createObjectStore(tableName, { keyPath: 'id' });
objectStore.createIndex('name', 'name', { unique: false });
}
}
}
getTransaction() {
return this.db.transaction([tableName], 'readwrite').objectStore(tableName)
}
add(record) {
return new Promise((resolve, reject) => {
try {
const request = this.getTransaction().add(record);
request.onsuccess = () => {
resolve()
};
request.onerror = (event) => {
reject(event)
}
} catch (error) {
reject(error)
}
})
}
getRecordById(id) {
return new Promise((resolve, reject) => {
try {
const objectStore = this.getTransaction()
const request = objectStore.get(id);
request.onerror = (event) => {
reject(event)
};
request.onsuccess = () => {
resolve(request.result ? request.result : {})
};
} catch (error) {
reject(error)
}
})
}
getAll() {
return new Promise((resolve, reject) => {
try {
const result = []
const openCursor = this.getTransaction().openCursor()
openCursor.onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
result.push(cursor.value)
cursor.continue();
} else {
resolve(result)
}
};
openCursor.onerror = (event) => {
reject(event)
}
} catch (error) {
reject(error)
}
})
}
update(record) {
return new Promise((resolve, reject) => {
try {
const request = this.getTransaction().put(record);
request.onsuccess = () => {
resolve()
};
request.onerror = (event) => {
reject(event)
}
} catch (error) {
reject(error)
}
})
}
removeById(id) {
return new Promise((resolve, reject) => {
try {
const request = this.getTransaction().delete(id);
request.onsuccess = () => {
resolve()
};
request.onerror = (event) => {
reject(event)
};
} catch (error) {
reject(error)
}
})
}
getByName(name) {
return new Promise((resolve, reject) => {
try {
const result = []
const index = this.getTransaction().index('name');
const request = index.openCursor(name);
request.onsuccess = function (e) {
const cursor = e.target.result;
if (cursor) {
result.push(cursor.value)
cursor.continue();
} else {
resolve(result)
}
}
request.onerror = (event) => {
reject(event)
};
} catch (error) {
reject(error)
}
})
}
}()
IndexDB
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 前面写过一篇:本地存储和数据库的文章,没基础的先看一下这里。不然你看着会懵。 还是回到我出文章的思路来 关于索引和...
- 推荐我的vue教程:VUE系列教程目录 温馨连接提示:vue中级之路篇系列教程:VUE系列---VUE+index...
- indexDB主要通过k-v数据库levelDB来存储账本的索引,索引对象包括账户(Account)、交易(Tra...