uni-app中使用sqlite对本地缓存下数据进行处理最近的学习分析

uni-app中使用sqlite对本地缓存下数据进行处理最近的学习分析

先分享一个自己参考的文章

https://blog.csdn.net/weixin_43512812/article/details/106050709
封装完全看这个写的…

然后是自己使用


 1. 先是根据自己的需求写了封装
// env.js 
//  我这个封装通过promise返回出去!!!
//  我这个封装通过promise返回出去!!!
//  创建数据库或者有该数据库就打开,    这一步必须要!
function openSqlite(){
	//创建数据库或者打开
	//这plus.sqlite只在手机上运行
	return new Promise((resolve,reject) =>{
		plus.sqlite.openDatabase({
			name:'main',  //数据库名称
			path:'_doc/bim-boot.db',   //数据库地址,uniapp推荐以下划线为开头,这到底存在哪里去了,我也不清楚,哈哈
			success(e){
				console.log(e)
				resolve(e); //成功回调
			},
			fail(e){
				reject(e); //失败回调
			}
		})
	})	
}

//  在该数据库里创建表格,   这一步也必须要!
//  下面注释里说的都是说sql:'create table if not exists....这里
//  userInfo是表格名,你也可以写其他的名,不能用数字作为表格名的开头!!!
//  括号里是表格的结构,列,这里我写了四列,list,id,gender,avatar这四列
//  list后面大写的英文是自动增加的意思,因为表格里的每一行必须有唯一标识
//  这sql语句会数据库的应该都看的懂,我是前端菜鸡,所以详细说明以便跟我一样不懂sql的前端看
//  "id" TEXT  意思是这一列放的值为字符串之类的,如果是想存数字之类的就改为INTEGER
//数据库不能存对象,数组
function userInfoSQL(sql){
	return new Promise((resolve,reject) =>{
	//创建表格在executeSql方法里写
		plus.sqlite.executeSql({
			name:'main',
			//表格创建或者打开,后面为表格结构
			sql:sql,
			success(e){
				resolve(e);
			},
			fail(e){
				reject(e);
			}
		})
	})
}

//  **向表格里添加数据**
//  根据表格的列来添加信息
//  因为list列我设为自动增加,所以不用添加数据
//  values里是传过来要存的值,我这里是动态的,单引号加双引号拼接
function addUserInformation(obj){
	//判断有没有传参
	if(obj !== undefined){
		//判断传的参是否有值
		var b = (JSON.stringify(obj) == "{}");
		if(!b){
			//obj传来的参数对象
			var id = obj.id || null; //id
			var name = obj.name || null; //名称
			var gender = obj.gender || null; //性别
			var avatar = obj.avatar || null; //头像
			return new Promise((resolve,reject) =>{
				plus.sqlite.executeSql({
					name:'main',
					sql:'insert into userInfo(id,name,gender,avatar) values("'+id+'","'+name+'","'+gender+'","'+avatar+'")',
					success(e){
						resolve(e);
					},
					fail(e){
						reject(e);
					}
				})
			})
		}else{
			return new Promise((resolve,reject) =>{reject("错误添加")})
		}
	}else{
		return new Promise((resolve,reject) =>{reject("错误添加")})
	}
}

//  查询获取数据库里的数据
//  根据传过来的值来获取信息,我这里写了可以有两个条件来获取,都是动态的
//  第一个参数为表格名,aa,bb分别为列名和列的值 , cc,dd同前面
//  传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
function selectInformationType(name,aa,bb,cc,dd){
	if(name !== undefined){
		//第一个是表单名称,后两个参数是列表名,用来检索
		if(aa !== undefined && cc !== undefined){
			//两个检索条件
			var sql = 'select * from '+name+' where '+aa+'='+bb+' and '+cc+'='+dd+'';
		}
		if(aa !== undefined && cc == undefined){
			//一个检索条件
			var sql = 'select * from '+name+' where '+aa+'='+bb+'';
		}
		if(aa == undefined){
			var sql = 'select * from '+name+'';
		}
		console.log(sql)
		return new Promise((resolve,reject) =>{
			plus.sqlite.selectSql({
				name:'main',
				sql:sql,
				success(e){
					resolve(e);
				},
				fail(e){
					reject(e);
				}
			})
		})
	}else{
		return new Promise((resolve,reject) =>{reject("错误查询")});
	}
}

//  删除数据库里的数据
//  参数跟上面查询获取数据一样
//  传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
function deleteInformationType(name,sol,qq,ww,ee){
	if(name !== undefined && sol !== undefined){
		//listId为表名,后面两个是列表名,检索用的
		if(ww !== undefined){
			//两个检索条件
			var sql = 'delete from '+name+' where '+sol+'="'+qq+'" and '+ww+'='+ee+'';
		}else{
			//一个检索条件
			var sql = 'delete from '+name+' where '+sol+'="'+qq+'"';
		}
		return new Promise((resolve,reject) =>{
			plus.sqlite.executeSql({
				name:'main',
				sql:sql,
				success(e){
					resolve(e);
				},
				fail(e){
					reject(e);
				}
			})
		})
	}else{
		return new Promise((resolve,reject) =>{reject("错误删除")});
	}
}

//  修改数据表里的数据
//  第一个参数为表格名,name为要修改的列名,cont为要修改为什么值,use,sel为搜索   条件,分别是列名和列值
//  传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
function modifyInformation(listName,name,cont,use,sel){
	//表格名,要修改地方的列名,修改后的内容,修改条件查询,列名,内容
	var sql;
	if(use == undefined){
		sql ='update '+listName+' set '+name+'="'+cont+'"';
	}else{
		sql ='update '+listName+' set '+name+'="'+cont+'" where '+use+'="'+sel+'"';
	}
	console.log(sql)
	//  where前面的是要修改的,后面的是条件,选择哪个
	return new Promise((resolve,reject) =>{
		plus.sqlite.executeSql({
			name:'main',
			sql:sql,
			success(e){
				resolve(e);
			},
			fail(e){
				reject(e);
			}
		})
	})
}

//  关闭数据库
function closeSQL(name){
	return new Promise((resolve,reject) =>{
		plus.sqlite.closeDatabase({
			name:'main',
			success(e){
				resolve(e);
			},
			fail(e){
				reject(e);
			}
		})
	})
}

//  删除数据库
function getDelete(name){
	return new Promise((resolve,reject) =>{
		plus.sqlite.executeSql({
			name:'main',
			sql: name,
			success(e){
				resolve(e);
			},
			fail(e){
				reject(e);
			}
		})
	})
}

//  监听数据库是否开启
function isOpen(name,path){
	var ss = name || 'main';
	var qq = path || '_doc/bim-boot.db';
	//数据库打开了就返回true,否则返回false
	var open = plus.sqlite.isOpenDatabase({
					name:ss,
					path:qq
				})
	return open;
}

//  一次获取指定数据条数
//  不想一次性把数据全拿过来就可以这样写
//  id为表格名,desc代表倒序拿数据,正常是从第一条开始拿,倒序就从最后一条也是最新的一条数据开始拿
//  limit 15 offset '+num+'',后面这是两个单引号,这句的意思是跳过多少条拿15条数据,num是动态值
//  比如你刚开始给num设为0,那就从最后面的数据开始拿15条,你下次肯定不想再拿刚刚获取到的数据,所以可以让num为15,这样就能一步一步的拿完所有的数据
function pullSQL(id,num){
	//  id为表名,num为跳过多少条数据
	//  根据list来倒序拿数据,跳过num条拿取15条
	return new Promise((resolve,reject) =>{
		plus.sqlite.selectSql({
			name:'main',
			sql:'select * from '+id+' order by list desc limit 15 offset '+num+'',
			success(e){
				resolve(e);
			},
			fail(e){
				reject(e);
			}
		})
	})
}
//把这些方法导出去
export{
	openSqlite,
	userInfoSQL,
	addUserInformation,
	selectInformationType,
	deleteInformationType,
	pullSQL,
	isOpen,
	closeSQL,
	getDelete,
	modifyInformation
}
**完全是看我分享的那篇文章写的,就是根据自己的需求加了一个删除表的方法**
## 页面使用

 1.index.vue
  <u-button type="primary" class="button" @click="_UploadPhoneScanRecord">
			立即同步
		</u-button>
		在页面导入自己需要的方法  路径根据自己封装的路径修改
		import { isOpen, openSqlite, selectInformationType, userInfoSQL, modifyInformation, getDelete } from '@/common/env.js';
我是一进页面就打开了表
onLoad() {
		this.openDB();
	},
	openDB() {
			//打开数据库
			let that = this;
			var open = isOpen();  // 这个是查询有没有打开数据库
			console.log(open);
			if (open) {
				console.log('打开');
				that.getInquire();  // 查询
			} else {
				//开启数据库
				let promise = openSqlite();
				promise
					.catch(error => {})
					.then(res => {
						that.getInquire();
					});
				// this.openSqlite()
			}
			//检查数据库是否打开
		},
 2. 这个方法是过度的,因为我自己的逻辑,不需要删除表的可以直接调用that.executefunctionSql()
 
 getInquire(){
			let that = this
			if(that.inquireList == ''){
				that.executefunctionSql()
			} else {
				console.log('有数据')
				this.getdrop()
			}
		},
		
		
 3.  // 创建表的方法
  executefunctionSql() {
			let that = this;
			let sql = 'create table if not exists userInfo("id" Integer primary key,"name" STRING(10) not null'
			let promise = userInfoSQL(sql);  //这个方法是创建表
			promise
				.catch(error => {})
				.then(res => {
					console.log('创建或者打开问题表成功!');
					let data = that.chatText;  // 这个是数据列表,数据库只能一条一条添加,不能是数组或者对象
					let sql = ''
					for (let i = 0; i < data.length; i++) {
						sql = `insert into userInfo values("${data[i].id}","${data[i].name}")`  
						
						let promise1 = userInfoSQL(sql);  // 这个方法是往表里添加数据
						promise1
							.catch(error => {


		console.log(error);
							})
							.then(res => {
								console.log('插入成功!');
								console.log(res);
								// 查询
								// let Inquire = selectInformationType('userInfo');  // 这个是为了调试的时候看加的查询方法
								// Inquire
								// 	.catch(error => {
								// 		console.log(error);
								// 	})
								// 	.then(res => {
								// 		console.log(res);
								// 	});
							});
					}
				});
		},
 4. 这个是修改方法的使用
// 修改  这个是页面的修改 因为有可能是修改多个字段所以我把他写了一个方法里
		_modifyInformation(listName,name,cont,use,sel){
			let that = this
			console.log('11'+ listName)
			let promise = modifyInformation(listName, name, cont, use, sel);
			promise
				.catch(error => {
					console.log(error);
				})
				.then(res => {
					console.log(res);
					that._selectSql('creditCardRecord');
				});
		},
		使用:
		status: 要修改的字段 1 把status修改成1 id是加的判断添加 creditCardRecord是表名
		 this._modifyInformation('creditCardRecord','status',1,'id',ob.id)
		 
 5. 删除表
 6. // 删除查询建表
		getdrop(){
			let that = this
			let sql = 'drop table userInfo'; // userInfo表名要删除的表名
			let promise = getDelete(sql);
			promise
				.catch(error => {
					console.log('drop userInfo fail')
				})
				.then(res => {
					console.log('drop userInfo success')
				});
		},

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值