ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2020-12-16 16:31:58  阅读:1268  来源: 互联网

标签:sqlite resolve console name app reject sql uni log


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

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

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

然后是自己使用

  1. 先是根据自己的需求写了封装
    //我这个封装通过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. <u-button type=“primary” class=“button” @click="_UploadPhoneScanRecord">
    立即同步

    在页面导入自己需要的方法 路径根据自己封装的路径修改
    import {
    isOpen,
    openSqlite,
    selectInformationType,
    userInfoSQL,
    modifyInformation,
    getDelete
    } from ‘@/common/env.js’;
    我是一进页面就打开了表
    onl oad() {
    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()
}
},

  1. // 创建表的方法
    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);
       					// 	});
       				});
       		}
       	});
    

    },

  2. 这个是修改方法的使用
    // 修改 这个是页面的修改 因为有可能是修改多个字段所以我把他写了一个方法里
    _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)

  3. 删除表

  4. // 删除查询建表
    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’)
    });
    },

标签:sqlite,resolve,console,name,app,reject,sql,uni,log
来源: https://blog.csdn.net/weixin_45543569/article/details/111284197

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有