uniapp sqlite数据库使用

uniapp sqlite 数据库使用

当我们开发聊天软件时就会进行大量的数据存储,如果直接用uniapp自带的缓存就不行了。

最近我们开发的一个项目,我负责聊天通信这一块,所以把我的经验分享一下给大家,当然我这个仅供参考,因为我也第一次做,哈哈哈,不废话了,直接上代码。

我把sqlite的使用方法封装在js文件里了,你们也可以根据自己的需求来封装

plus.sqlite要在手机上才能运行,建议真机测试,浏览器上会报错!!!

先在manifest.json里的App模块权限配置里勾选SQLite(数据库)!!!

先在manifest.json里的App模块权限配置里勾选SQLite(数据库)!!!

先在manifest.json里的App模块权限配置里勾选SQLite(数据库)!!!

//我这个封装通过promise返回出去!!!

//我这个封装通过promise返回出去!!!

//创建数据库或者有该数据库就打开,    这一步必须要!

function openSqlite(){

//创建数据库或者打开

//这plus.sqlite只在手机上运行

return new Promise((resolve,reject) =>{

plus.sqlite.openDatabase({

name:'pop',  //数据库名称

path:'_doc/pop.db',  //数据库地址,uniapp推荐以下划线为开头,这到底存在哪里去了,我也不清楚,哈哈

success(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(){

return new Promise((resolve,reject) =>{

//创建表格在executeSql方法里写

plus.sqlite.executeSql({

name:'pop',

//表格创建或者打开,后面为表格结构

sql:'create table if not exists userInfo("list" INTEGER PRIMARY KEY AUTOINCREMENT,"id" TEXT,"name" TEXT,"gender" TEXT,"avatar" TEXT)',

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:'pop',

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+'';

}

return new Promise((resolve,reject) =>{

plus.sqlite.selectSql({

name:'pop',

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:'pop',

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+'"';

}

//where前面的是要修改的,后面的是条件,选择哪个

return new Promise((resolve,reject) =>{

plus.sqlite.executeSql({

name:'pop',

sql:sql,

success(e){

resolve(e);

},

fail(e){

reject(e);

}

})

})

}

//关闭数据库

function closeSQL(name){

return new Promise((resolve,reject) =>{

plus.sqlite.closeDatabase({

name:'pop',

success(e){

resolve(e);

},

fail(e){

reject(e);

}

})

})

}

//监听数据库是否开启

function isOpen(name,path){

var ss = name || 'pop';

var qq = path || '_doc/pop.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:'pop',

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,

modifyInformation

}

最后想在哪个页面用就用import {} from 'xxxxx’引入这个文件就行,{}放要使用的方法,不使用的可以不用放进去,注意!!{}里的方法名要一一对应,我这封装返回的是promise对象

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容