uniapp离线存储数据到SQLite数据库

最近在做项目中,有需求需要app在无网络的情况下存储数据,等到有网络的时候把数据发送给后端。

这里我记录下我在uniapp离线存储数据到SQLite数据库中的方法,这里主要是uniapp去操作SQLite数据库的一些操作,我把这些操作写成一个class在此记录方便自己或者需要的人使用。

首先创建一个js文件,这里我取名 Sqlite.js,具体直接上代码:

/** 关于Sqlite数据库相关操作 */
export default class Sqlite {
	/** 构造方法 */
	constructor(databaseName, databasePath) {
		// 判断是否存在plus
		if(!plus) {
			throw new Error("不存在plus");
		}
		this.databaseName = databaseName;
		this.databasePath = databasePath;
		// 调用初始化方法...
		this.initDatabase();
	}
	
	
	/** 初始化数据库 */
	initDatabase() {
		// 判断数据库是否已经打开
		if(plus.sqlite.isOpenDatabase({ name: this.databaseName, path: this.databasePath })) {
			return;
		}
		// 打开数据库...
		this.open();
	}
	
	/** 处理打开数据库 */
	open() {
		return new Promise((resolve, reject) => {
			plus.sqlite.openDatabase({
				name: this.databaseName,
				path: this.databasePath,
				success: () => {
					resolve();
				},
				fail: error => {
					reject();
				}
			});
		});
	}
	
	/** 处理关闭数据库 */
	close() {
		return new Promise((resolve, reject) => {
			plus.sqlite.closeDatabase({
				name: this.databaseName,
				success: () => {
					resolve();
				},
				fail: () => {
					reject();
				}
			});
		});
	}

	/**
	 * 处理执行查询的SQL语句
	 * @param {string} sql
	 */
	select(sql) {
		return new Promise((resolve, reject) => {
			plus.sqlite.selectSql({
				name: this.databaseName,
				sql,
				success: res => {
					resolve(res);
				},
				fail: error => {
					reject(error);
				}
			});
		});
	}
	
	/**
	 * 处理执行增删改的SQL语句
	 * @param {Array[string]|string} sql
	 */
	execute(sql) {
		return new Promise((resolve, reject) => {
			plus.sqlite.executeSql({
				name: this.databaseName,
				sql,
				success: res => {
					resolve(res);
				},
				fail: error => {
					reject(error);
				}
			});
		});
	}

	/**
	 * 删除当前数据库下的某章表
	 * @param {string} tableName 表名
	 */
	deleteTable(tableName) {
		return this.execute(`drop table ${tableName};`);
	}
	
	/** 获取当前库下的所有表 - 目前用于测试 */
	getDataBaseTables() {
		return this.select(`select name from sqlite_master where type = 'table' order by name;`);
	}
	
	/**
	 * 清理某一张表的所有数据
	 * @param {string} tabelName 表名称 
	 */
	clearTable(tableName) {
		return this.execute(`delete from ${tableName}`);
	}
}

这个文件只是去操作数据库,至于sql语句需要根据自己的需求去动态的创建🙂。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值