浏览器的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();
	    }
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图图小淘气_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值