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
	})
}
相关推荐
Mintopia2 分钟前
🚀 一文看懂 “Next.js 全栈 + 微服务 + GraphQL” 的整体样貌
前端·javascript·全栈
Mintopia5 分钟前
🧬 医疗Web场景下,AIGC的辅助诊断技术边界与伦理
前端·javascript·aigc
半桶水专家9 分钟前
父子组件通信详解
开发语言·前端·javascript
Watermelo61712 分钟前
从vw/h到clamp(),前端响应式设计的痛点与进化
前端·javascript·css·算法·css3·用户界面·用户体验
Moment18 分钟前
快到  2026  年了:为什么我们还在争论  CSS 和 Tailwind?
前端·javascript·css
梵得儿SHI29 分钟前
Vue 核心语法详解:模板语法中的绑定表达式与过滤器(附 Vue3 替代方案)
前端·javascript·vue.js·插值语法·vue模板语法·绑定表达式·过滤器机制
江城开朗的豌豆31 分钟前
TypeScript枚举:让你的代码更有"选择权"
前端·javascript
江城开朗的豌豆41 分钟前
TypeScript接口:打造你的代码“契约”之道
前端·javascript
江城开朗的豌豆44 分钟前
TypeScript类:面向对象编程的超级武器
前端·javascript
鹏多多1 小时前
React项目使用useMemo优化性能指南和应用场景
前端·javascript·react.js