uniapp-sqlite 數據庫使用


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
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM