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閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容