UniAPP 利用sqlite保存数据

背景:利用uniapp开发一个APP,APP需要在断网的情况下,临时保存数据,把数据保存在uniapp的sqlite里面,这样可以随时的取到所保持的数据。

 

1.在uniapp的工程中需要添加sqlite数据库,如下图

 

 

 

2.在uniapp的共同组件中添加下面文件。

function openComDB(name, path, callback) {

	plus.sqlite.openDatabase({
		name: name,
		path: path,
		success: function(e) {
			// plus.nativeUI.alert('打开数据库成功');  
			callback(e)
		},
		fail: function(e) {
			// plus.nativeUI.alert("打开数据库失败");  
			callback(e);
		}
	})
}

function executeSQL(name, sql, callback) {

	plus.sqlite.selectSql({
		name: name,
		sql: sql,
		success: function(e) {
			// console.log("查询数据库:" + name + ",表:" + sql + ";的");  
			console.log("查询数据库:"+JSON.stringify(e));  
			callback(e);
		},
		fail: function(e) {
			console.log("查询数据库失败:" + JSON.stringify(e));
			callback(e);
		}
	})
}

function closeComDB(name, path, callback) {

	plus.sqlite.closeDatabase({
		name: name,
		path: path,
		success: function(e) {
			// plus.nativeUI.alert('打开数据库成功');  
			callback(e)
		},
		fail: function(e) {
			// plus.nativeUI.alert("打开数据库失败");  
			callback(e);
		}
	})
}


export {
	openComDB,
	closeComDB,
	executeSQL
}

 

3.在需要调用sqlite的画面中,调用上面的方法

注:需要用真机模拟的形式来进行运行,否则会出现错误

 

	import {
		openComDB,
		executeSQL,
		dropSQL
	} from '@/common/sqlite.js'



export default {
		
		data() {
			return {
				
			}
		},
		onLoad: function(option) {
			
			this.isOpenDB();
		},
		methods: {
			isOpenDB: function() {
				console.log('是否打开数据库');
				var isOpen = plus.sqlite.isOpenDatabase({
					name: getApp().globalData.dbName, //数据库的名字  
					path: getApp().globalData.dbPath //地址  
				});
				console.log(!isOpen);

				if (!isOpen) {
					console.log('Unoepned:' + isOpen);
					// plus.nativeUI.alert('Unopened!');  
					this.openDB(); //打開DB  
				} else {
					// plus.nativeUI.alert('Opened!');  
					// this.isNet();  
					// this.getLocalType();  
					this.dbInit();
				}
			},

			openDB: function() {
				//SQLite      
				openComDB(getApp().globalData.dbName, getApp().globalData.dbPath, res => {
					console.log('打开数据库');
					this.dbInit();

				});
			},

			dbInit: function() {
				//创建建筑物类型表;
				var sqlTable = 'create table if not exists buildTable("id" INT(10) NOT NULL UNIQUE,"name" CHAR,"gridCode" CHAR)'

				executeSQL(getApp().globalData.dbName, sqlTable, res => {
					console.log('表创建成功:' + res);

					var sqlInsert = "insert into buildTable values('";
					sqlInsert += 10 + "','";
					sqlInsert += "XXX1" + "','";
					sqlInsert += "00001" + "'";
					sqlInsert += ')';
					executeSQL(getApp().globalData.dbName, sqlInsert, res => {})
					
					sqlInsert = "insert into buildTable values('";
					sqlInsert += 11 + "','";
					sqlInsert += "XXX2" + "','";
					sqlInsert += "00002" + "'";
					sqlInsert += ')';
					executeSQL(getApp().globalData.dbName, sqlInsert, res => {})
					
					executeSQL(getApp().globalData.dbName, 'select * from buildTable', res => {
						console.log("建筑物查询结果:" + JSON.stringify(res));
					})
				})
			}
    }
}

  

4.上面的添加之后,需要用安卓原生进行打包。

下载SDK:https://nativesupport.dcloud.net.cn/AppDocs/download/android

找到文件夹:Android-SDK@3.2.9.81057_20210927\SDK\libs\sqlite-release.aar 放到安卓原生的工程里面

添加可以引用上面的sqlite的包即可如下图

 

 

 

 

经试验,打包之后可以使用sqlite的

 

 参考资料:

https://www.html5plus.org/doc/zh_cn/sqlite.html#plus.sqlite.transaction

https://www.freesion.com/article/42581053845/

https://uniapp.dcloud.io/api/storage/storage?id=clearstoragesync

 

posted @ 2021-10-21 10:38  不刷牙的大虫子  阅读(5852)  评论(0编辑  收藏  举报