h5 sqlite 操作封装

参考文档
错误码

javascript 复制代码
// 数据库名称
const namesjk = "sl"
// 存储路径
const path = `_doc/${name}.db`


/**   基本操作
 * 查询数据库连接状态    isOpenDatabase		
 * 			无参数
 * 			返回 true   false
 * 
 * 
 * 关闭数据库	closeDatabase
 * 			无参数
 * 			Promise 成功/失败
 * 
 * 
 * 打开/创建数据库	openDatabase
 * 			无参数
 * 			Promise 成功/失败
 * 
 * 查询	selectSql
 * 			sql
 * 			Promise 成功/失败
 * 
 * 执行	executeSql
 * 			sql
 * 			Promise 成功/失败
 * 
 * 
 * 事务	transaction
 * 			begin(开始事务)、commit(提交)、rollback(回滚)。 
 * 			Promise 成功/失败
 * 
 */

/**   表操作 	
 * 
 * 
 * 创建表			CreateATable
 * 表名称   表结构 除id默认的其它字段 {a:{type:'sqlite的数据类型,默认 TEXT',isnull:false}}
 * 成功/失败 true   false
 * 
 * 
 * 修改表			UpdateATable
 * 表名称   表结构 除id默认的其它字段 {a:{type:'sqlite的数据类型,默认 TEXT',isnull:false}}
 * 成功/失败 true   false
 * 
 * 
 * 删除表			DelTable
 * 表名称 
 * 成功/失败 true   false
 * 
 */

/**   增删改查操作 	
 * 
 * 增加		Increase
 *  表名称    数据   {a:1,b:1}
 * 返回数据  /  0
 * 
 * 删除		Delete
 * 表名称       条件默认id=id
 * 返回数据  /  0
 * 
 * 清空		Clear
 * 表名称      是否截断
 * 返回数据  /  0
 * 
 * 更新			Update
 * 表名称   数据 {a:1,b:1}    条件默认id=id
 * 返回数据  /  0
 * 
 * 
 * 查询				Select
 * 表名称   数据['a','b']默认*    条件默认
 * 返回数据  /  0
 * 
 * 
 */



// ***************基本操作******************************

// 查询数据库连接状态
// 返回 true   false
export async function isOpenDatabase() {
	return plus.sqlite.isOpenDatabase({
		name: namesjk,
		path: path
	})
}

// 关闭数据库
export async function closeDatabase() {
	return new Promise((resolve, reject) => {
		plus.sqlite.closeDatabase({
			name: namesjk,
			success(e) {
				resolve(e)
			},
			fail(e) {
				reject(e)
			}
		})
	})
}

// 打开/创建数据库
export async function openDatabase() {
	return new Promise((resolve, reject) => {
		plus.sqlite.openDatabase({
			name: namesjk,
			path: path,
			success(e) {
				resolve(e)
			},
			fail(e) {
				reject(e)
			}
		})
	})
}

// 查询
// sql
export async function selectSql(sqlCode) {
	return new Promise((resolve, reject) => {
		plus.sqlite.selectSql({
			name: namesjk,
			sql: sqlCode,
			success(res) {
				resolve(res)
			},
			fail(e) {
				reject(e)
			}
		})
	})
}

// 执行
// sql
export async function executeSql(sqlCode) {
	return new Promise((resolve, reject) => {
		plus.sqlite.executeSql({
			name: namesjk,
			sql: sqlCode,
			success(res) {
				resolve(res)
			},
			fail(e) {
				reject(e)
			}
		})
	})
}

// 事务
// begin(开始事务)、commit(提交)、rollback(回滚)。 
export async function transaction(operation) {
	return new Promise((resolve, reject) => {
		plus.sqlite.transaction({
			name: namesjk,
			operation: operation,
			success(res) {
				resolve(res)
			},
			fail(e) {
				reject(e)
			}
		})
	})
}


// *********表操作************************

// 创建表
// 表名称   表结构 除id默认的其它字段 {a:{type:'sqlite的数据类型,默认 TEXT',isnull:false}}
// 成功/失败 true   false
export async function CreateATable(name, obj) {
	selectSql(`SELECT name FROM sqlite_master WHERE type= 'table' AND name= '${name}'`).then(
		(e) => {
			if (e.length == 0) {
				let sql1 = `create table if not exists ${name} (
								"id" INTEGER PRIMARY KEY AUTOINCREMENT,
								${Object.keys(obj).map(x=>{
									return `"${x}" ${obj[x]['type']?obj[x]['type']:'TEXT'} ${obj[x]['isnull']?'NOT NULL':''}`
								}).join(',')}
							)`
				executeSql(sql1).then((e) => {
					return true
				}).catch((err) => {
					console.log("创建表失败:", err)
					return false
				})
			}
		}).catch((e) => {
		console.log("创建表失败:", err)
		return false
	})
}

// 修改表
// 表名称   表结构 除id默认的其它字段 {a:{type:'sqlite的数据类型,默认 TEXT',isnull:false}}
// 成功/失败 true   false
export async function UpdateATable(name, obj) {
	DelTable(name)
	CreateATable(name, obj)
}

// 删除表
// 表名称 
// 成功/失败 true   false
export async function DelTable(name) {
	selectSql(`SELECT name FROM sqlite_master WHERE type= 'table' AND name= '${name}'`).then(
		(e) => {
			if (e.length > 0) {
				let sql1 = `drop table ${name}`
				executeSql(sql1).then((e) => {
					return true
				}).catch((err) => {
					console.log("删除表失败:", err)
					return false
				})
			}
		}).catch((e) => {
		console.log("删除表失败:", err)
		return false
	})
}


// **************增删改查********************************

// 增加
// 表名称    数据   {a:1,b:1}
export async function Increase(name, obj) {
	let sql1 = `INSERT INTO ${name} (${Object.keys(obj).map(x=>{
		return `${x}`
	}).join(',')}) VALUES (${Object.keys(obj).map(x=>{
		return `${obj[x]}`
	}).join(',')});`
	executeSql(sql1).then((e) => {
		return e
	}).catch((err) => {
		console.log("增加失败:", err)
		return 0
	})
}


// 删除
// 表名称       条件默认id=id
export async function Delete(name, sql) {
	let sql1 = `delete from ${name} where ${sql?sql:'id=id'}`
	executeSql(sql1).then((e) => {
		return e
	}).catch((err) => {
		console.log("删除失败:", err)
		return 0
	})
}

// 清空
// 表名称      是否截断
export async function Clear(name,isTRUNCATE) {
	let sql1 = isTRUNCATE?`TRUNCATE ${name}`:`delete from ${name}`
	executeSql(sql1).then((e) => {
		return e
	}).catch((err) => {
		console.log("删除失败:", err)
		return 0
	})
}


// 更新
// 表名称   数据 {a:1,b:1}    条件默认id=id
export async function Update(name, obj, sql) {
	let sql1 = `UPDATE ${name} SET ${Object.keys(obj).map(x=>{
		return `${x} = ${obj[x]} `
	}).join(',')} where ${sql?sql:'id=id'}`
	executeSql(sql1).then((e) => {
		return e
	}).catch((err) => {
		console.log("更新失败:", err)
		return 0
	})
}


// 查询
// 表名称   数据['a','b']默认*    条件默认
export async function Select(name, obj, sql) {
	let sql1 = `select ${obj && obj.length>0?obj.join(','):'*'} from ${name} ${sql?'where ' + sql:''}`
	selectSql(sql1).then((e) => {
		return e
	}).catch((err) => {
		console.log("查询失败:", err)
		return 0
	})
}
相关推荐
小码快撩17 分钟前
vue应用移动端访问缓慢问题
前端·javascript·vue.js
yayaya15225 分钟前
javaScriptBOM
开发语言·javascript·ecmascript
Riesenzahn26 分钟前
使用vue如何监听元素尺寸的变化?
前端·javascript
阿征学IT31 分钟前
圣诞快乐(h5 css js(圣诞树))
前端·javascript·css
斜杠poven1 小时前
为什么加try catch 不会 block 进程?
前端·javascript·node.js
2401_857026231 小时前
依托 SSM 与 Vue 的电脑测评系统:展现电脑真实实力
前端·javascript·vue.js
2401_857610031 小时前
解析基于 SSM 框架 Vue 电脑测评系统:把握电脑测评精髓
前端·javascript·vue.js
烂不烂问厨房1 小时前
前端项目发布后打开报错Uncaught SyntaxError: Unexpected token ‘<‘ (at chunk-vendors)
前端·javascript·vue.js·前端打包发布
总爱写点小BUG1 小时前
可搜索的下拉选择框:filterable属性详解
前端·javascript·vue.js
程序媛_MISS_zhang_01101 小时前
el-table中合并垂直方向的单元格
前端·javascript·vue.js