• uni-app集成使用SQLite


    一、打开uni-app中SQLite

    二、封装sqlite.js 

    1. module.exports = {
    2. dbName: 'chat', // 数据库名称
    3. dbPath: '_doc/chat.db', // 数据库地址,推荐以下划线为开头 _doc/xxx.db
    4. /**
    5. * @Description: 创建数据库 或 有该数据库就打开
    6. * @author: ZXL
    7. * @createTime: 2023-10-12 09:23:10
    8. * @Copyright by 蓝创科技有限公司
    9. */
    10. openSqlite() {
    11. return new Promise((resolve, reject) => {
    12. // 打开数据库
    13. plus.sqlite.openDatabase({
    14. name: this.dbName,
    15. path: this.dbPath,
    16. success(e) {
    17. resolve(e);
    18. },
    19. fail(e) {
    20. reject(e);
    21. }
    22. })
    23. })
    24. },
    25. /**
    26. * @Description: 判断数据库是否打开 数据库打开了就返回 true,否则返回 false
    27. * @author: ZXL
    28. * @createTime: 2023-10-12 08:43:03
    29. * @Copyright by 蓝创科技有限公司
    30. */
    31. isOpen() {
    32. var open = plus.sqlite.isOpenDatabase({
    33. name: this.dbName, // 数据库名称
    34. path: this.dbPath // 数据库地址
    35. })
    36. return open;
    37. },
    38. /**
    39. * @Description: 创建表(executeSql是执行增删改等操作的SQL语句)
    40. * @author: ZXL
    41. * @createTime: 2023-10-12 08:43:03
    42. * @Copyright by 蓝创科技有限公司
    43. */
    44. ExecuteSQL(sql) {
    45. return new Promise((resolve, reject) => {
    46. plus.sqlite.executeSql({
    47. name: this.dbName,
    48. sql: sql,
    49. success(e) {
    50. resolve(e);
    51. },
    52. fail(e) {
    53. reject(e);
    54. }
    55. })
    56. })
    57. },
    58. /**
    59. * @Description: 查询表数据
    60. * @author: ZXL
    61. * @createTime: 2023-10-12 08:52:15
    62. * @Copyright by 蓝创科技有限公司
    63. */
    64. getTable(dbTable){
    65. return new Promise((resolve, reject) => {
    66. plus.sqlite.selectSql({
    67. name: this.dbName,
    68. sql: `SELECT * FROM ${dbTable}`,
    69. success(e) {
    70. resolve(e);
    71. },
    72. fail(e) {
    73. console.log(e)
    74. reject(e);
    75. }
    76. })
    77. })
    78. },
    79. /**
    80. * @Description: 查询数据库所有表
    81. * @author: ZXL
    82. * @createTime: 2023-10-12 09:01:05
    83. * @Copyright by 蓝创科技有限公司
    84. */
    85. QueryAllTables(){
    86. return new Promise((resolve, reject) => {
    87. plus.sqlite.selectSql({
    88. name: this.dbName,
    89. sql: "SELECT * FROM sqlite_master WHERE type='table'",
    90. success(e) {
    91. resolve(e);
    92. },
    93. fail(e) {
    94. console.log(e)
    95. reject(e);
    96. }
    97. })
    98. })
    99. },
    100. /**
    101. * @Description: 查询数据库下的所有表
    102. * @author: ZXL
    103. * @createTime: 2023-10-12 09:20:33
    104. * @Copyright by 蓝创科技有限公司
    105. */
    106. selectTableName(){
    107. return new Promise((resolve, reject) => {
    108. plus.sqlite.selectSql({
    109. name: this.dbName,
    110. sql: "select * FROM chat where type='table'",
    111. success(e) {
    112. resolve(e);
    113. },
    114. fail(e) {
    115. console.log(e)
    116. reject(e);
    117. }
    118. })
    119. })
    120. },
    121. /**
    122. * @Description: 新增数据
    123. * @author: ZXL
    124. * 向表格里添加数据 sql:'INSERT INTO dbTable VALUES('x','x','x')' 对应新增
    125. * 或者 sql:'INSERT INTO dbTable ('x','x','x') VALUES('x','x','x')' 具体新增
    126. * 插入 INSERT INTO 、 dbTable 是表名、根据表头列名插入列值
    127. * @createTime: 2023-10-12 10:21:32
    128. * @Copyright by 蓝创科技有限公司
    129. */
    130. //使用
    131. // let arr = [
    132. // {id:121,dept_id: '100',dept_name: '你好呀'},
    133. // {id:332,dept_id: '200',dept_name: '你好呀'},
    134. // ]
    135. // arr.map((item) => {
    136. // let condition = "'id','dept_id','dept_name'"
    137. // let data = `'${item.id}','${item.dept_id}','${item.dept_name}'`
    138. // DB.insertTableData('表名',数据,字段).then((res) => {})
    139. // .catch((error) => {
    140. // console.log('失败', error)
    141. // })
    142. // })
    143. insertTableData(dbTable, data, condition) {
    144. // 判断有没有传参
    145. if (dbTable !== undefined && data !== undefined) {
    146. // 判断传的参是否有值
    147. var bol = (JSON.stringify(data) == "{}");
    148. if (!bol) {
    149. if (condition == undefined) var sql = `INSERT INTO ${dbTable} VALUES('${data}')`;
    150. else var sql = `INSERT INTO ${dbTable} (${condition}) VALUES(${data})`;
    151. return new Promise((resolve, reject) => {
    152. // 表格添加数据
    153. plus.sqlite.executeSql({
    154. name: this.dbName,
    155. sql: sql,
    156. success(e) {
    157. resolve(e);
    158. },
    159. fail(e) {
    160. reject(e);
    161. }
    162. })
    163. })
    164. } else {
    165. return new Promise((resolve, reject) => { reject("错误添加") })
    166. }
    167. } else {
    168. return new Promise((resolve, reject) => { reject("错误添加") })
    169. }
    170. },
    171. /**
    172. * @Description: 数据库建表
    173. * @author: ZXL
    174. * 数据库建表 sql:'CREATE TABLE IF NOT EXISTS dbTable("id" varchar(50),"name" TEXT)
    175. * 创建 CREATE TABLE IF NOT EXISTS 、 dbTable 是表名,不能用数字开头、括号里是表格的表头
    176. * @createTime: 2023-10-12 09:26:44
    177. * @Copyright by 蓝创科技有限公司
    178. */
    179. // 使用
    180. // DB.createTable('bus_mzpy','"id" INTEGER PRIMARY KEY AUTOINCREMENT,"mzpy_name" TEXT ,"dept_id" INTEGER ,"dept_name" TEXT ,"mzpy_concent" TEXT')
    181. createTable(dbTable, data) {
    182. return new Promise((resolve, reject) => {
    183. // executeSql: 执行增删改等操作的SQL语句
    184. plus.sqlite.executeSql({
    185. name: this.dbName,
    186. sql: `CREATE TABLE IF NOT EXISTS ${dbTable}(${data})`,
    187. success(e) {
    188. resolve(e);
    189. },
    190. fail(e) {
    191. reject(e);
    192. }
    193. })
    194. })
    195. },
    196. /**
    197. * @Description: 数据库删表 sql:'DROP TABLE dbTable'
    198. * @author: ZXL
    199. * @createTime: 2023-10-12 09:28:46
    200. * @Copyright by 蓝创科技有限公司
    201. */
    202. dropTable(dbTable) {
    203. return new Promise((resolve, reject) => {
    204. plus.sqlite.executeSql({
    205. name: this.dbName,
    206. sql: `DROP TABLE ${dbTable}`,
    207. success(e) {
    208. resolve(e);
    209. },
    210. fail(e) {
    211. reject(e);
    212. }
    213. })
    214. })
    215. },
    216. /**
    217. * @Description: 根据条件向表里插入数据、更新或覆盖
    218. * @author: ZXL
    219. * 根据条件向表格里添加数据 有数据更新、无数据插入
    220. * (建表时需要设置主键) 例如 --- "roomid" varchar(50) PRIMARY KEY
    221. * @createTime: 2023-10-12 09:31:19
    222. * @Copyright by 蓝创科技有限公司
    223. */
    224. insertOrReplaceData(dbTable, data, condition) {
    225. // 判断有没有传参
    226. if (dbTable !== undefined && data !== undefined) {
    227. if (condition == undefined) var sql = `INSERT OR REPLACE INTO ${dbTable} VALUES('${data}')`;
    228. else var sql = `INSERT OR REPLACE INTO ${dbTable} (${condition}) VALUES(${data})`;
    229. return new Promise((resolve, reject) => {
    230. // 表格添加数据
    231. plus.sqlite.executeSql({
    232. name: this.dbName,
    233. sql: sql,
    234. success(e) {
    235. resolve(e);
    236. },
    237. fail(e) {
    238. reject(e);
    239. }
    240. })
    241. })
    242. } else {
    243. return new Promise((resolve, reject) => { reject("错误添加") })
    244. }
    245. },
    246. /**
    247. * @Description: 表里查询数据
    248. * @author: ZXL
    249. * 查询获取数据库里的数据 sql:'SELECT * FROM dbTable WHERE lname = 'lvalue''
    250. * 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
    251. * @createTime: 2023-10-12 09:44:08
    252. * @Copyright by 蓝创科技有限公司
    253. */
    254. selectTableData(dbTable, lname, lvalue, cc, dd) {
    255. if (dbTable !== undefined) {
    256. let sql;
    257. // 第一个是表单名称,后两个参数是列表名,用来检索
    258. // 两个检索条件
    259. if (lname !== undefined && cc !== undefined) sql=`SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${cc} = '${dd}'`;
    260. // 一个检索条件
    261. if (lname !== undefined && cc == undefined) sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}'`;
    262. if (lname == undefined) sql = `SELECT * FROM ${dbTable}`;
    263. return new Promise((resolve, reject) => {
    264. // 表格查询数据 执行查询的SQL语句
    265. plus.sqlite.selectSql({
    266. name: this.dbName,
    267. sql: sql,
    268. success(e) {
    269. resolve(e);
    270. },
    271. fail(e) {
    272. reject(e);
    273. }
    274. })
    275. })
    276. } else {
    277. return new Promise((resolve, reject) => { reject("错误查询") });
    278. }
    279. },
    280. /**
    281. * @Description: 表里删除数据
    282. * @author: ZXL
    283. * 删除表里的数据 sql:'DELETE FROM dbTable WHERE lname = 'lvalue''
    284. * 删除 DELETE FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
    285. * @createTime: 2023-10-12 09:40:37
    286. * @Copyright by 蓝创科技有限公司
    287. */
    288. deleteTableData(dbTable, lname, lvalue, ww, ee) {
    289. if(dbTable !== undefined){
    290. let sql;
    291. if(lname == undefined){
    292. sql = `DELETE FROM ${dbTable}`;
    293. }else{
    294. if (ww !== undefined) {
    295. // 两个检索条件
    296. sql = `DELETE FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${ww} = '${ee}'`;
    297. } else {
    298. // 一个检索条件
    299. sql = `DELETE FROM ${dbTable} WHERE ${lname} = '${lvalue}'`;
    300. }
    301. }
    302. return new Promise((resolve, reject) => {
    303. // 删除表数据
    304. plus.sqlite.executeSql({
    305. name: this.dbName,
    306. sql: sql,
    307. success(e) {
    308. resolve(e);
    309. },
    310. fail(e) {
    311. reject(e);
    312. }
    313. })
    314. })
    315. } else {
    316. return new Promise((resolve, reject) => { reject("错误删除") });
    317. }
    318. },
    319. /**
    320. * @Description: 表里修改数据
    321. * @author: ZXL
    322. * 修改数据表里的数据 sql:"UPDATE dbTable SET 列名 = '列值',列名 = '列值' WHERE lname = 'lvalue'"
    323. * 修改 UPDATE 、 dbTable 是表名, data: 要修改的列名=修改后列值, lname,lvalue 是查询条件的列名和列值
    324. * @createTime: 2023-10-12 09:37:59
    325. * @Copyright by 蓝创科技有限公司
    326. */
    327. updateTableData(dbTable, data, lname, lvalue) {
    328. let sql;
    329. if (lname == undefined) sql = `UPDATE ${dbTable} SET ${data}`;
    330. else sql = `UPDATE ${dbTable} SET ${data} WHERE ${lname} = '${lvalue}'`;
    331. // WHERE 前面是要修改的列名、列值,后面是条件的列名、列值
    332. return new Promise((resolve, reject) => {
    333. // 修改表数据
    334. plus.sqlite.executeSql({
    335. name: this.dbName,
    336. sql: sql,
    337. success(e) {
    338. resolve(e);
    339. },
    340. fail(e) {
    341. reject(e);
    342. }
    343. })
    344. })
    345. },
    346. /**
    347. * @Description: 获取指定数据条数
    348. * @author: ZXL
    349. * 获取指定数据条数 sql:"SELECT * FROM dbTable ORDER BY 'id' DESC LIMIT 15 OFFSET 'num'"
    350. * dbTable 表名, ORDER BY 代表排序默认正序, id 是排序的条件 DESC 代表倒序,从最后一条数据开始拿
    351. * LIMIT 15 OFFSET '${num}',这句的意思是跳过 num 条拿 15 条数据, num 为跳过多少条数据是动态值
    352. * 例 初始num设为0,就从最后的数据开始拿15条,下次不拿刚获取的数据,所以可以让num为15,这样就能一步一步的拿完所有的数据
    353. * @createTime: 2023-10-12 09:33:43
    354. * @Copyright by 蓝创科技有限公司
    355. */
    356. pullSQL(dbTable, id, num) {
    357. return new Promise((resolve, reject) => {
    358. plus.sqlite.selectSql({
    359. name: this.dbName,
    360. sql: `SELECT * FROM ${dbTable} ORDER BY '${id}' DESC LIMIT 15 OFFSET '${num}'`,
    361. success(e) {
    362. resolve(e);
    363. },
    364. fail(e) {
    365. reject(e);
    366. }
    367. })
    368. })
    369. },
    370. /**
    371. * @Description: 关闭数据库
    372. * @author: ZXL
    373. * @createTime: 2023-10-12 09:23:56
    374. * @Copyright by 蓝创科技有限公司
    375. */
    376. closeSqlite() {
    377. return new Promise((resolve, reject) => {
    378. plus.sqlite.closeDatabase({
    379. name: this.dbName,
    380. success(e) {
    381. resolve(e);
    382. },
    383. fail(e) {
    384. reject(e);
    385. }
    386. })
    387. })
    388. },
    389. }

    三、使用 

    1. import DB from '@/utils/sqlite.js'
    2. 类似这样
    3. DB.selectTableData('','','').then((res) => {
    4. }).catch((error) => {
    5. console.log('查询失败', error)
    6. })

  • 相关阅读:
    TypeScript快速上手
    Impala进阶
    前端的ElementUI表格里面的编辑前后的值的获取
    Python机器学习实战-特征重要性分析方法(6):XGBoost(附源码和实现效果)
    如何在Ubuntu 20.04|18.04上安装 FreeSwitch
    ARM架构--栈
    JVM之栈帧解析
    修剪二叉搜索树likou669
    Vue 的生命周期之间到底做了什么事清?(源码详解)
    Gradio学习(五)—————学习一下布局Column的使用
  • 原文地址:https://blog.csdn.net/qq_42717015/article/details/133783260