浏览器的IndexedDB本地存储
IndexedDB 中文教程
https://www.tangshuang.net/3735.html
简单的示例:
<script type="text/javascript"> /** * IndexedDB * */ var db; /*数据库对象*/ var objectStore; /*仓库(表)*/ /** * 创建数据库 */ var request = window.indexedDB.open('myIndex', 3); /*该域中的数据库myIndex*/ request.onerror = function(event) { console.log('open database error'); }; /** * 业务代码 */ request.onsuccess = function(event) { db = request.result; /*数据库对象*/ // add(); // read(); // update(); // remove(); //readAll(); // console.log(db); }; /** * 创建表 */ request.onupgradeneeded = function(event) { db = event.target.result; /*数据库对象*/ if(!db.objectStoreNames.contains('person')) { objectStore = db.createObjectStore('person', { keyPath: 'id' }); /*创建person仓库(表) 主键*/ // objectStore = db.createObjectStore('person',{autoIncrement:true});/*自动创建主键*/ // 创建索引,自己规定的,后面作为根据索引进行查询的依据 objectStore.createIndex('name', 'name', { unique: false }); objectStore.createIndex('email', 'email', { unique: true }); } console.log(db); }; /** * 插入数据 */ function add() { var request = db.transaction(['person'], 'readwrite') .objectStore('person') .add({ id: 3, name: '张三', age: 24, email: 'zhangsan1@example.com' }); request.onsuccess = function(event) { console.log('数据写入成功'); }; request.onerror = function(event) { console.log('数据写入失败'); }; } /** * 读取数据 */ function read() { var transaction = db.transaction(['person']); var objectStore = transaction.objectStore('person'); var request = objectStore.get(1); request.onerror = function(event) { console.log('事物失败'); }; request.onsuccess = function(event) { if(request.result) { console.log('Name' + request.result.name); console.log('Age' + request.result.age); console.log('Email' + request.result.email); } else { console.log('未获得数据记录'); } }; } /** * 遍历数据 */ function readAll() { var objectStore = db.transaction(['person']).objectStore('person'); objectStore.openCursor().onsuccess = function(event) { var cursor = event.target.result; if(cursor) { console.log('Id:' + cursor.key); console.log('Name:' + cursor.value.name); console.log('Age:' + cursor.value.age); console.log('Email:' + cursor.value.email); } else { console.log('没有更多数据了'); } } } /** * 更新数据 */ function update() { var request = db.transaction(['person'], 'readwrite') .objectStore('person') .put({ id: 1, name: '李四', age: 35, email: 'lisi@example.com' }); request.onsuccess = function(event) { console.log('数据更新成功'); }; request.onerror = function(event) { console.log('数据更新失败'); }; } /** * 删除数据 */ function remove() { var request = db.transaction(['person'], 'readwrite') .objectStore('person') .delete(1); request.onsuccess = function(event) { console.log('数据删除成功'); }; } </script>
升级版:
class IndexedDB{ constructor(dbName, storeName, version){ this.storeName = storeName; const indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; const request = indexedDB.open(dbName, version); request.onsuccess = e => { this.db = e.target.result; console.log('indexDB初始化成功'); }; request.onupgradeneeded = e => { this.db = e.target.result; if(!this.db.objectStoreNames.contains(storeName)){ this.store = this.db.createObjectStore(storeName); } console.log("数据库创建成功,Version:"+version); }; request.onerror = e => {console.info('数据库创建失败', e);}; } get(key, callback){ const transaction = this.db.transaction(this.storeName); const objectStore = transaction.objectStore(this.storeName); const request = objectStore.get(key); request.onerror = e => {console.info('获取失败', e);}; request.onsuccess = e => {callback(e.target.result);}; } set(key, value){ let oldValue; this.get(key, function(res){oldValue = res;}); if(oldValue){ console.info('请运用更新方法更新!'); }else{ const transaction = this.db.transaction(this.storeName, 'readwrite'); const objectStore = transaction.objectStore(this.storeName); const request = objectStore.add(value, key); request.onerror = e => {console.info('添加失败', e);}; } } update(newValue, key){ this.get(key,(oldValue)=>{ if(!oldValue){ console.info('请用set方法设置值'); }else{ const transaction = this.db.transaction(this.storeName, 'readwrite'); const objectStore = transaction.objectStore(this.storeName); const request = objectStore.put(newValue, key); request.onerror = e => {console.info('更新失败', e);}; } }); } remove(key){ const request = this.db.transaction(this.storeName, 'readwrite') .objectStore(this.storeName) .delete(key); request.onerror = e => {console.info('删除失败', e);}; } delete(name){ window.indexedDB.deleteDatabase(name); } close(){ this.db.close(); } }