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
	})
}
相关推荐
kyriewen11 小时前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js
minglie16 小时前
一个置换问题
javascript
默_笙17 小时前
🌀 别再手动写 Prompt 了!我让 AI 自己循环改到满意为止
javascript
To_OC1 天前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
To_OC1 天前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
labixiong1 天前
实现一个能跑的迷你版Promise(一)
前端·javascript·面试
weedsfly2 天前
还在用 Axios?你可能需要重新理解 XHR 与 Fetch
前端·javascript·面试
CoderWeen2 天前
从零实现一个 Vue3 流程图编辑器:节点拖拽、贝塞尔连线与框选
前端·javascript
To_OC2 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
kyriewen2 天前
我用 50 行代码重写了 React Router 核心,终于搞懂了前端路由原理
前端·javascript·react.js