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
	})
}
相关推荐
周淳APP4 分钟前
【React Hook全家桶】大致过一遍React Hooks
前端·javascript·react.js·前端框架·react hooks
●VON7 分钟前
Flutter组件深度解析:从基础到高级的完整指南
android·javascript·flutter·harmonyos·von
xuankuxiaoyao13 分钟前
VUE.JS 实践 第三章
前端·javascript·vue.js
工程师老罗29 分钟前
lvgl有哪些布局?
前端·javascript·html
木子清billy41 分钟前
物联网浏览器(IoTBrowser)-js开发人脸识别
开发语言·javascript·物联网
关中老四43 分钟前
【原生JS甘特图MZGantt 】如何给父任务设置独立进度条
前端·javascript·甘特图
Irene19911 小时前
ES13 # 私有字段( Private Fields) 语法:在类中定义真正的私有属性
javascript·私有字段
WiChP1 小时前
【V0.1B4】从零开始的2D游戏引擎开发之路
前端·javascript·游戏引擎
意法半导体STM321 小时前
【官方原创】STM32CubeProgrammer与STM32 Bootloader连接全流程实战指南 LAT1631
开发语言·前端·javascript·stm32·单片机·嵌入式硬件
Irene19911 小时前
getter 和 方法的区别(数据属性和访问器属性,Vue 3 中,computed 和 getter 的关系和区别)
javascript·vue.js·computed·getter