1. 程式人生 > 資料庫 >uni-app中使用sqlite對本地快取下資料進行處理最近的學習分析

uni-app中使用sqlite對本地快取下資料進行處理最近的學習分析

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’)
    });
    },