uni-app集成使用SQLite

news2024/12/25 2:37:23

一、打开uni-app中SQLite

二、封装sqlite.js 

module.exports = {
    dbName: 'chat', // 数据库名称
    dbPath: '_doc/chat.db', // 数据库地址,推荐以下划线为开头   _doc/xxx.db
	
	/**
	  * @Description: 创建数据库 或 有该数据库就打开
	  * @author: ZXL
	  * @createTime: 2023-10-12 09:23:10
	  * @Copyright by 蓝创科技有限公司
	  */
	openSqlite() {
	    return new Promise((resolve, reject) => {
			// 打开数据库
			plus.sqlite.openDatabase({
			    name: this.dbName,
			    path: this.dbPath,
			    success(e) {
				    resolve(e); 
			    },
			    fail(e) {
				    reject(e); 
			    }
			})
	    })
	},
	/**
	  * @Description: 判断数据库是否打开  数据库打开了就返回 true,否则返回 false
	  * @author: ZXL
	  * @createTime: 2023-10-12 08:43:03
	  * @Copyright by 蓝创科技有限公司
	  */
    isOpen() {
		var open = plus.sqlite.isOpenDatabase({
		    name: this.dbName,  // 数据库名称
		    path: this.dbPath  // 数据库地址
		})
		return open;
    },
	/**
	  * @Description: 创建表(executeSql是执行增删改等操作的SQL语句)
	  * @author: ZXL
	  * @createTime: 2023-10-12 08:43:03
	  * @Copyright by 蓝创科技有限公司
	  */
    ExecuteSQL(sql) {
		return new Promise((resolve, reject) => {
		    plus.sqlite.executeSql({
				name: this.dbName,
				sql: sql,
				success(e) {
				    resolve(e);
				},
				fail(e) {
				    reject(e);
				}
		    })
		})
    },
	/**
	  * @Description: 查询表数据
	  * @author: ZXL
	  * @createTime: 2023-10-12 08:52:15
	  * @Copyright by 蓝创科技有限公司
	  */
	getTable(dbTable){
	  	return new Promise((resolve, reject) => {
			plus.sqlite.selectSql({
				name: this.dbName,
				sql: `SELECT * FROM ${dbTable}`,
				success(e) {
					resolve(e);
				},
				fail(e) {
					console.log(e)
					reject(e);
				}
			})
	  	})
	},
	/**
	  * @Description: 查询数据库所有表
	  * @author: ZXL
	  * @createTime: 2023-10-12 09:01:05
	  * @Copyright by 蓝创科技有限公司
	  */
	QueryAllTables(){
		return new Promise((resolve, reject) => {
			plus.sqlite.selectSql({
				name: this.dbName,
				sql: "SELECT * FROM sqlite_master WHERE type='table'",
				success(e) {
					resolve(e);
				},
				fail(e) {
					console.log(e)
					reject(e);
				}
			})
		})
	},
	/**
	  * @Description: 查询数据库下的所有表
	  * @author: ZXL
	  * @createTime: 2023-10-12 09:20:33
	  * @Copyright by 蓝创科技有限公司
	  */
	selectTableName(){
		return new Promise((resolve, reject) => {
			plus.sqlite.selectSql({
				name: this.dbName,
				sql: "select * FROM chat where type='table'",
				success(e) {
					resolve(e);
				},
				fail(e) {
					console.log(e)
					reject(e);
				}
			})
		})
	},
	/**
	  * @Description: 新增数据
	  * @author: ZXL
	  * 向表格里添加数据 sql:'INSERT INTO dbTable VALUES('x','x','x')'   对应新增
	  * 或者 sql:'INSERT INTO dbTable ('x','x','x') VALUES('x','x','x')'   具体新增
	  * 插入 INSERT INTO  、 dbTable 是表名、根据表头列名插入列值
	  * @createTime: 2023-10-12 10:21:32
	  * @Copyright by 蓝创科技有限公司
	  */
	//使用
	// let arr = [
	//     {id:121,dept_id: '100',dept_name: '你好呀'},
	// 	   {id:332,dept_id: '200',dept_name: '你好呀'},
	// ]
	// arr.map((item) => {
	//     let condition = "'id','dept_id','dept_name'"
	//     let data = `'${item.id}','${item.dept_id}','${item.dept_name}'`
	//     DB.insertTableData('表名',数据,字段).then((res) => {})
	// 	  .catch((error) => {
	// 	    console.log('失败', error)
	// 	  })
	// })
	insertTableData(dbTable, data, condition) {
	    // 判断有没有传参
	    if (dbTable !== undefined && data !== undefined) {
			// 判断传的参是否有值
			var bol = (JSON.stringify(data) == "{}");
			if (!bol) {
				if (condition == undefined) var sql = `INSERT INTO ${dbTable} VALUES('${data}')`;
				else var sql = `INSERT INTO ${dbTable} (${condition}) VALUES(${data})`;
			    return new Promise((resolve, reject) => {
					// 表格添加数据
					plus.sqlite.executeSql({
					  name: this.dbName,
					  sql: sql,
					  success(e) {
						resolve(e);
					  },
					  fail(e) {
						reject(e);
					  }
					})
			    })
			} else {
			  return new Promise((resolve, reject) => { reject("错误添加") })
			}
		} else {
			return new Promise((resolve, reject) => { reject("错误添加") })
	    }
	},
	/**
	  * @Description: 数据库建表
	  * @author: ZXL
	  * 数据库建表 sql:'CREATE TABLE IF NOT EXISTS dbTable("id" varchar(50),"name" TEXT) 
	  * 创建 CREATE TABLE IF NOT EXISTS 、 dbTable 是表名,不能用数字开头、括号里是表格的表头
	  * @createTime: 2023-10-12 09:26:44
	  * @Copyright by 蓝创科技有限公司
	  */
    // 使用
	// DB.createTable('bus_mzpy','"id" INTEGER PRIMARY KEY AUTOINCREMENT,"mzpy_name" TEXT ,"dept_id" INTEGER ,"dept_name" TEXT ,"mzpy_concent" TEXT')
    createTable(dbTable, data) {
		return new Promise((resolve, reject) => {
		    // executeSql: 执行增删改等操作的SQL语句
		    plus.sqlite.executeSql({
				name: this.dbName,
				sql: `CREATE TABLE IF NOT EXISTS ${dbTable}(${data})`,
				success(e) {
				    resolve(e);
				},
				fail(e) {
				    reject(e);
				}
		    })
		})
    },
	/**
	  * @Description: 数据库删表 sql:'DROP TABLE dbTable'
	  * @author: ZXL
	  * @createTime: 2023-10-12 09:28:46
	  * @Copyright by 蓝创科技有限公司
	  */
    dropTable(dbTable) {
		return new Promise((resolve, reject) => {
		    plus.sqlite.executeSql({
				name: this.dbName,
				sql: `DROP TABLE ${dbTable}`,
				success(e) {
					resolve(e);
				},
				fail(e) {
					reject(e);
				}
		    })
		})
    },
	/**
	  * @Description: 根据条件向表里插入数据、更新或覆盖
	  * @author: ZXL
	  *  根据条件向表格里添加数据  有数据更新、无数据插入
	  * (建表时需要设置主键) 例如 --- "roomid" varchar(50) PRIMARY KEY
	  * @createTime: 2023-10-12 09:31:19
	  * @Copyright by 蓝创科技有限公司
	  */
    insertOrReplaceData(dbTable, data, condition) {
		// 判断有没有传参
		if (dbTable !== undefined && data !== undefined) {
			if (condition == undefined) var sql = `INSERT OR REPLACE INTO ${dbTable} VALUES('${data}')`;
			else var sql = `INSERT OR REPLACE INTO ${dbTable} (${condition}) VALUES(${data})`;
			return new Promise((resolve, reject) => {
			    // 表格添加数据
			    plus.sqlite.executeSql({
					name: this.dbName,
					sql: sql,
					success(e) {
						resolve(e);
					},
					fail(e) {
						reject(e);
					}
			    })
		    })
		} else {
		    return new Promise((resolve, reject) => { reject("错误添加") })
		}
    },
	/**
	  * @Description: 表里查询数据
	  * @author: ZXL
	  * 查询获取数据库里的数据 sql:'SELECT * FROM dbTable WHERE lname = 'lvalue''
	  * 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
	  * @createTime: 2023-10-12 09:44:08
	  * @Copyright by 蓝创科技有限公司
	  */ 
    selectTableData(dbTable, lname, lvalue, cc, dd) {
		if (dbTable !== undefined) {
			let sql;
		    // 第一个是表单名称,后两个参数是列表名,用来检索
		    // 两个检索条件
		    if (lname !== undefined && cc !== undefined) sql=`SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${cc} = '${dd}'`;
			// 一个检索条件
		    if (lname !== undefined && cc == undefined) sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}'`;
		    if (lname == undefined) sql = `SELECT * FROM ${dbTable}`;
		    return new Promise((resolve, reject) => {
				// 表格查询数据  执行查询的SQL语句
				plus.sqlite.selectSql({
				    name: this.dbName,
				    sql: sql,
				    success(e) {
					    resolve(e);
				    },
				    fail(e) {
					    reject(e);
				    }
				})
		    })
		} else {
		  return new Promise((resolve, reject) => { reject("错误查询") });
		}
    },
    /**
      * @Description: 表里删除数据
      * @author: ZXL
      * 删除表里的数据 sql:'DELETE FROM dbTable WHERE lname = 'lvalue''
      * 删除 DELETE FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
      * @createTime: 2023-10-12 09:40:37
      * @Copyright by 蓝创科技有限公司
      */
    deleteTableData(dbTable, lname, lvalue, ww, ee) {
		if(dbTable !== undefined){
			let sql;
		    if(lname == undefined){
			    sql = `DELETE FROM ${dbTable}`;
		    }else{
				if (ww !== undefined) {
				  // 两个检索条件
				  sql = `DELETE FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${ww} = '${ee}'`;
				} else {
				  // 一个检索条件
				  sql = `DELETE FROM ${dbTable} WHERE ${lname} = '${lvalue}'`;
				}
		    }
			return new Promise((resolve, reject) => {
				// 删除表数据
				plus.sqlite.executeSql({
					name: this.dbName,
					sql: sql,
					success(e) {
						resolve(e);
					},
					fail(e) {
						reject(e);
					}
				})
			})
		} else {
		  return new Promise((resolve, reject) => { reject("错误删除") });
		}
    },
    /**
      * @Description: 表里修改数据
      * @author: ZXL
      * 修改数据表里的数据 sql:"UPDATE dbTable SET 列名 = '列值',列名 = '列值' WHERE lname = 'lvalue'"
      * 修改 UPDATE 、 dbTable 是表名, data: 要修改的列名=修改后列值, lname,lvalue 是查询条件的列名和列值
      * @createTime: 2023-10-12 09:37:59
      * @Copyright by 蓝创科技有限公司
      */
    updateTableData(dbTable, data, lname, lvalue) {
		let sql;
		if (lname == undefined) sql = `UPDATE ${dbTable} SET ${data}`;
		else sql = `UPDATE ${dbTable} SET ${data} WHERE ${lname} = '${lvalue}'`;
		// WHERE 前面是要修改的列名、列值,后面是条件的列名、列值
		return new Promise((resolve, reject) => {
		  // 修改表数据
		    plus.sqlite.executeSql({
				name: this.dbName,
				sql: sql,
				success(e) {
				  resolve(e);
				},
				fail(e) {
				  reject(e);
				}
		    })
		})
    },
	/**
	  * @Description: 获取指定数据条数
	  * @author: ZXL
	  * 获取指定数据条数  sql:"SELECT * FROM dbTable ORDER BY 'id' DESC LIMIT 15 OFFSET 'num'"
	  * dbTable 表名, ORDER BY 代表排序默认正序, id 是排序的条件 DESC 代表倒序,从最后一条数据开始拿
	  * LIMIT 15 OFFSET '${num}',这句的意思是跳过 num 条拿 15 条数据, num 为跳过多少条数据是动态值
	  * 例 初始num设为0,就从最后的数据开始拿15条,下次不拿刚获取的数据,所以可以让num为15,这样就能一步一步的拿完所有的数据
	  * @createTime: 2023-10-12 09:33:43
	  * @Copyright by 蓝创科技有限公司
	  */
	pullSQL(dbTable, id, num) {
		return new Promise((resolve, reject) => {
		    plus.sqlite.selectSql({
				name: this.dbName,
				sql: `SELECT * FROM ${dbTable} ORDER BY '${id}' DESC LIMIT 15 OFFSET '${num}'`,
				success(e) {
				  resolve(e);
				},
				fail(e) {
				  reject(e);
				}
		    })
		})
    },
    /**
    	* @Description: 关闭数据库
    	* @author: ZXL
    	* @createTime: 2023-10-12 09:23:56
    	* @Copyright by 蓝创科技有限公司
    	*/
    closeSqlite() {
		return new Promise((resolve, reject) => {
			plus.sqlite.closeDatabase({
				name: this.dbName,
				success(e) {
					resolve(e);
				},
				fail(e) {
					reject(e);
				}
			})
		})
    },
}

三、使用 

import DB from '@/utils/sqlite.js'


类似这样
DB.selectTableData('','','').then((res) => {
				
}).catch((error) => {
	console.log('查询失败', error)
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1083708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python安装geopy出现错误

python: 安装geopy出现错误 错误信息: 解决办法:再试一次 居然成功了,就是说,也不知道为什么

【师兄啊师兄2】公布,李长寿成功渡劫,敖乙叛变,又一美女登场

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 由玄机制作的师兄啊师兄第一季这才完结没有多久,没想到现在第二季就公布了,连海报和预告都出来了,看样子已经做得差不多了。预告看下来,能够明显感觉到官方又进步…

Zero-Copy零拷贝

零拷贝不是0次拷贝,是内核缓存区到应用缓存区0次拷贝 参考文章 Linux 中的零拷贝机制

C++技能系列( 9 ) - 如何实现线程池【详解】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream w…

室内渲染的艺术:室内渲染的灵魂!

在一个寒冷的冬日,当你走进一个温暖舒适的房间,是否曾想过这个房间的渲染效果是如何实现的呢?室内渲染作为一种视觉表现技术,能够将平面的设计转化为真实的三维场景,让人们更好地感受到空间的美感和舒适度。随着科技的…

Endnote 用户自定义Field

当EndNote自带的Field无法满足需求时,EndNote有8个可供用户自定义的Field(Custom1-Custom8)。我们可自定义其在题录编辑区及文献题录列表区中的名字。以改Custom3至“是否需要深入阅读”Field为例:步骤如下: Edit→Pre…

微信小程序 js中写一个px单位转rpx单位的函数

大家写东西自然还是会比较喜欢用rpx 但是 事实证明 在js中 还是px好用 因为很多单位交互的函数还是只返回px单位的 理论上将 750 rpx 是整个屏幕的宽度 那么 我们可以这样写一个函数 pxToRpx(px) {//获取整个屏幕的宽度单位 pxlet screenWidth wx.getSystemInfoSync().scree…

libncurses.so.5: cannot open shared object file: No such file or directory解决办法

最近在安装mysql的时候碰到这个问题,由此记录一下 mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory解决办法 yum install ncurses-compat-libs

程序员内心独白:注释,爱恨交加,双标难舍

程序员对代码注释可以说是又爱又恨又双标……你是怎么看待程序员不写注释这一事件的呢? 方向一:分享你的观点和故事 对公司好的方面: 从程序员的角度来看,注释对于代码的可读性和可维护性非常重要。注释可以让其他开发者更容易理…

C语言之通讯录的实现篇

目录 test.c 主菜单menu 创建通讯录con 初始化通讯录InitContact 增加个人信息AddContact 展示个人信息ShowContact 删除个人信息DelContact 查找个人信息SearchContact 修改个人信息ModifyContact test.c总代码 contact.h 头文件包含 PeoInfo_个人信息的设置声…

基于PTP的同步时钟同步

基于PTP的同步时钟同步 编辑搜图 请点击输入图片描述(最多18字) ​本设计采用PTP (Precision Time Protocol)协议,来实现同步时间。PTP是一种精确测量和控制系统的网络协议,用于同步分布式系统中的各种设备和服务器的时间。 首先…

Maxon Cinema 4D 2024:创造无限可能,激发你的创造力

在视觉效果和3D建模领域,Maxon的Cinema 4D一直以其卓越的性能和创新的功能引领着时代潮流。今天,我们很高兴地宣布推出最新版本——Maxon Cinema 4D 2024(C4D 2024),它将再次提升行业标准,为设计师提供更强…

SVN提交项目时,出现了这样的提示:“XXX“ is scheduled for addition, but is missing。

原因是:之前用SVN提交过的文件/文件夹,被标记为"addition"状态,等待被加入到仓库。虽然你把这个文件删除了,SVN提交的时候还是会尝试提交这个文件,所以就会提示:"but is missing"。解决…

科技资讯|9月新能源汽车零售74.3万辆,充电桩迎来发展高峰

据中国乘联会发布的初步数据,中国 9 月份乘用车市场零售 202.8 万辆,同比增长 6%,环比增 6%。今年以来,我国乘用车市场累计零售 1,524 万辆,同比增长 2%。 乘联会预计,9 月份新能源车市场零售 74.3 万辆&a…

​电子商务新宠电商独立站成功案例解析|抢占市场巅峰:成功打造日本跨境电商独立站攻略! ​

日本离中国只有690公里,时差仅一个小时。距离和便捷的物流是日本跨境电商最具天然的优势,但除了这种天然优势外,日本还有哪些优势不容忽视?无论是独立站还是乐天、雅虎、日亚,都要遵循一个国家的消费习惯,制…

更新 | 持续开源迅为RK3568驱动指南第十二篇-GPIO子系统

《iTOP-RK3568开发板驱动开发指南》更新,本次更新内容对应的是驱动(第十二期_GPIO子系统-全新升级)视频,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。 文档教程更新至第十…

【翻译】增长秘笈,如何让你的开源项目Star数快速增长

TL;DR (前言) 本文翻译自 https://star-history.com/blog/playbook-for-more-github-stars,尽可能遵照原文,部分内容做少许改动。 我和我的团队最近推出了一个面向开发者的开源工具。这是我第一次推广一个开源工具。很难找到有意…

ES相关面试问题整理

索引模板了解么 索引模板,一种复用机制,就像一些项目的开发框架如 Laravel 一样,省去了大量的重复,体力劳动。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。 模板定义&#xf…

印尼封锁TikTok Shop后,数字商业将何去何从?

近年来,TikTok已成为全球范围内备受欢迎的短视频平台,它的崛起改变了用户的娱乐方式,也为商家提供了一个全新的数字营销平台。 然而,最近印尼政府宣布封锁TikTok Shop,理由是平台上存在虚假广告和欺诈行为。这一决定引…

跳槽阿里,面试被虐惨了

1、八股文几乎全背熟,谁能想到最后问的全是JVM,一下给我问懵了,当场就挂了! 2、曾经的我很不屑JVM,后来我逐帧学习! 3、现在竞争激烈,甭管什么厂,都要问点JVM! 最近有…