最近在做项目中,有需求需要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语句需要根据自己的需求去动态的创建🙂。