sqlite進行大量的數據存儲
plus.sqlite要在手機上才能運行,建議真機測試,瀏覽器上會報錯
先在manifest.json里的App模塊權限配置里勾選SQLite(數據庫)!!!
//創建數據庫或者有該數據庫就打開
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
}