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; //idvar 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,否则返回falsevar 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立即同步 在页面导入自己需要的方法 路径根据自己封装的路径修改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 = thisif(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 = thisconsole.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 = thislet sql = 'drop table userInfo'; // userInfo表名要删除的表名let promise = getDelete(sql);promise.catch(error => {console.log('drop userInfo fail')}).then(res => {console.log('drop userInfo success')});},
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
