From 2bc6b99a71bc2531605f73898df1bf3539a7e101 Mon Sep 17 00:00:00 2001 From: wangchen Date: Tue, 1 Aug 2023 16:37:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E8=A3=85=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/rSqlite.js | 223 ++++++++++++++++++++++++++++++++++++++++ common/rtos-sqlite.js | 233 ++++++++++++++++++++++++++++++++++++++++++ pages/index/index.vue | 44 ++++++-- pages/test/ceshi.vue | 6 +- 4 files changed, 494 insertions(+), 12 deletions(-) create mode 100644 common/rSqlite.js create mode 100644 common/rtos-sqlite.js diff --git a/common/rSqlite.js b/common/rSqlite.js new file mode 100644 index 0000000..fe43a54 --- /dev/null +++ b/common/rSqlite.js @@ -0,0 +1,223 @@ +module.exports = { + dbName: 'databaseName', // 数据库名称 + dbPath: '_downloads/databaseName.db', // 数据库地址,推荐以下划线为开头 _doc/xxx.db + + // 判断数据库是否打开 + isOpen() { + // 数据库打开了就返回 true,否则返回 false + var open = plus.sqlite.isOpenDatabase({ + name: this.dbName, // 数据库名称 + path: this.dbPath // 数据库地址 + }) + return open; + }, + + // 创建数据库 或 有该数据库就打开 + openSqlite() { + return new Promise((resolve, reject) => { + // 打开数据库 + plus.sqlite.openDatabase({ + name: this.dbName, + path: this.dbPath, + success(e) { + resolve(e); // 成功回调 + }, + fail(e) { + reject(e); // 失败回调 + } + }) + }) + }, + + // 关闭数据库 + closeSqlite() { + return new Promise((resolve, reject) => { + plus.sqlite.closeDatabase({ + name: this.dbName, + success(e) { + resolve(e); + }, + fail(e) { + reject(e); + } + }) + }) + }, + + // 数据库建表 sql:'CREATE TABLE IF NOT EXISTS dbTable("id" varchar(50),"name" TEXT) + // 创建 CREATE TABLE IF NOT EXISTS 、 dbTable 是表名,不能用数字开头、括号里是表格的表头 + // data 是字段设置字符串,逗号分隔,如"id varchar(32),name varchar(32),age int ..." + 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); + } + }) + }) + }, + + // 数据库删表 sql:'DROP TABLE dbTable' + 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); + } + }) + }) + }, + + // 向表格里添加数据 sql:'INSERT INTO dbTable VALUES('x','x','x')' 对应新增 + // 或者 sql:'INSERT INTO dbTable ('x','x','x') VALUES('x','x','x')' 具体新增 + // 插入 INSERT INTO 、 dbTable 是表名、根据表头列名插入列值 + insertTableData(dbTable, data, condition) { + // 判断有没有传参 + if (dbTable !== undefined && data !== undefined) { + // 判断传的参是否有值 + console.log(data,condition); + var bol = (data == ""); + if (!bol) { + if (condition == undefined) { + var sql = `INSERT INTO ${dbTable} VALUES(${data})`; + console.log(sql); + } else { + var sql = `INSERT INTO ${dbTable} (${condition}) VALUES(${data})`; + } + // console.log(sql); + return new Promise((resolve, reject) => { resolve(sql) }) + } else { + return new Promise((resolve, reject) => { reject("错误添加") }) + } + } else { + return new Promise((resolve, reject) => { reject("错误添加") }) + } + }, + + + // 查询获取数据库里的数据 sql:'SELECT * FROM dbTable WHERE lname = 'lvalue'' + // 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值 + selectTableData(dbTable, fieldName1, fieldValue1, fieldName2, fieldValue2,fieldName3,fieldValue3) { + if (dbTable !== undefined) { + // 第一个是表单名称,后两个参数是列表名,用来检索 + if (fieldName1 !== undefined && fieldName2 !== undefined && fieldName3!==undefined) { + // 三个检索条件 + var sql = `SELECT * FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}' AND ${fieldName2} = '${fieldValue2}' AND ${fieldName3}='${fieldValue3}'`; + } + if (fieldName1 !== undefined && fieldName2 !== undefined &&fieldName3==undefined) { + // 两个检索条件 + var sql = `SELECT * FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}' AND ${fieldName2} = '${fieldValue2}'`; + } + if (fieldName1 !== undefined && fieldName2 == undefined && fieldName3==undefined ) { + // 一个检索条件 + var sql = `SELECT * FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}'`; + // console.log(sql); + } + if (fieldName1 == undefined) { + var 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("错误查询") }); + } + }, + + // 删除表里的数据 sql:'DELETE FROM dbTable WHERE lname = 'lvalue'' + // 删除 DELETE FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值 + deleteTableData(dbTable, fieldName1, fieldValue1, fieldName2, fieldValue2) { + if (dbTable !== undefined) { + if (lname == undefined) { + var sql = `DELETE FROM ${dbTable}`; + } else { + if (ww !== undefined) { + // 两个检索条件 + var sql = `DELETE FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}' AND ${ww} = '${fieldValue2}'`; + } else { + // 一个检索条件 + var sql = `DELETE FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}'`; + } + } + 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("错误删除") }); + } + }, + + // 修改数据表里的数据 sql:"UPDATE dbTable SET 列名='列值',列名='列值' WHERE lname = 'lvalue'" + // 修改 UPDATE 、 dbTable 是表名, data: 是由要"列名1=值1,列名2=值2..."拼接的字符串, lname,lvalue 是查询条件的列名和列值 + updateTableData(dbTable, data, fieldName, fieldValue) { + if (lname == undefined) { + var sql = `UPDATE ${dbTable} SET ${data}`; + } else { + var sql = `UPDATE ${dbTable} SET ${data} WHERE ${fieldName} = '${fieldValue}'`; + } + // WHERE 前面是要修改的列名、列值,后面是条件的列名、列值 + return new Promise((resolve, reject) => { + // 修改表数据 + plus.sqlite.executeSql({ + name: this.dbName, + sql: sql, + success(e) { + resolve(e); + }, + fail(e) { + reject(e); + } + }) + }) + }, + + // 获取指定数据条数 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,这样就能一步一步的拿完所有的数据 + 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); + } + }) + }) + } +} diff --git a/common/rtos-sqlite.js b/common/rtos-sqlite.js new file mode 100644 index 0000000..74c05ca --- /dev/null +++ b/common/rtos-sqlite.js @@ -0,0 +1,233 @@ +module.exports = { + dbName: 'databaseName', // 数据库名称 + dbPath: '_downloads/databaseName.db', // 数据库地址,推荐以下划线为开头 _doc/xxx.db + + // 判断数据库是否打开 + isOpen() { + // 数据库打开了就返回 true,否则返回 false + var open = plus.sqlite.isOpenDatabase({ + name: this.dbName, // 数据库名称 + path: this.dbPath // 数据库地址 + }) + return open; + }, + + // 创建数据库 或 有该数据库就打开 + openSqlite() { + return new Promise((resolve, reject) => { + // 打开数据库 + plus.sqlite.openDatabase({ + name: this.dbName, + path: this.dbPath, + success(e) { + resolve(e); // 成功回调 + }, + fail(e) { + reject(e); // 失败回调 + } + }) + }) + }, + + // 关闭数据库 + closeSqlite() { + return new Promise((resolve, reject) => { + plus.sqlite.closeDatabase({ + name: this.dbName, + success(e) { + resolve(e); + }, + fail(e) { + reject(e); + } + }) + }) + }, + + // 数据库建表 sql:'CREATE TABLE IF NOT EXISTS dbTable("id" varchar(50),"name" TEXT) + // 创建 CREATE TABLE IF NOT EXISTS 、 dbTable 是表名,不能用数字开头、括号里是表格的表头 + // data 是字段设置字符串,逗号分隔,如"id varchar(32),name varchar(32),age int ..." + 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); + } + }) + }) + }, + + // 数据库删表 sql:'DROP TABLE dbTable' + 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); + } + }) + }) + }, + + // 向表格里添加数据 sql:'INSERT INTO dbTable VALUES('x','x','x')' 对应新增 + // 或者 sql:'INSERT INTO dbTable ('x','x','x') VALUES('x','x','x')' 具体新增 + // 插入 INSERT INTO 、 dbTable 是表名、根据表头列名插入列值 + 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})`; + } + // console.log(sql); + 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("错误添加") }) + } + }, + + + // 查询获取数据库里的数据 sql:'SELECT * FROM dbTable WHERE lname = 'lvalue'' + // 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值 + selectTableData(dbTable, fieldName1, fieldValue1, fieldName2, fieldValue2,fieldName3,fieldValue3) { + if (dbTable !== undefined) { + // 第一个是表单名称,后两个参数是列表名,用来检索 + if (fieldName1 !== undefined && fieldName2 !== undefined && fieldName3!==undefined) { + // 三个检索条件 + var sql = `SELECT * FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}' AND ${fieldName2} = '${fieldValue2}' AND ${fieldName3}='${fieldValue3}'`; + } + if (fieldName1 !== undefined && fieldName2 !== undefined &&fieldName3==undefined) { + // 两个检索条件 + var sql = `SELECT * FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}' AND ${fieldName2} = '${fieldValue2}'`; + } + if (fieldName1 !== undefined && fieldName2 == undefined && fieldName3==undefined ) { + // 一个检索条件 + var sql = `SELECT * FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}'`; + // console.log(sql); + } + if (fieldName1 == undefined) { + var 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("错误查询") }); + } + }, + + // 删除表里的数据 sql:'DELETE FROM dbTable WHERE lname = 'lvalue'' + // 删除 DELETE FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值 + deleteTableData(dbTable, fieldName1, fieldValue1, fieldName2, fieldValue2) { + if (dbTable !== undefined) { + if (lname == undefined) { + var sql = `DELETE FROM ${dbTable}`; + } else { + if (ww !== undefined) { + // 两个检索条件 + var sql = `DELETE FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}' AND ${ww} = '${fieldValue2}'`; + } else { + // 一个检索条件 + var sql = `DELETE FROM ${dbTable} WHERE ${fieldName1} = '${fieldValue1}'`; + } + } + 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("错误删除") }); + } + }, + + // 修改数据表里的数据 sql:"UPDATE dbTable SET 列名='列值',列名='列值' WHERE lname = 'lvalue'" + // 修改 UPDATE 、 dbTable 是表名, data: 是由要"列名1=值1,列名2=值2..."拼接的字符串, lname,lvalue 是查询条件的列名和列值 + updateTableData(dbTable, data, fieldName, fieldValue) { + if (lname == undefined) { + var sql = `UPDATE ${dbTable} SET ${data}`; + } else { + var sql = `UPDATE ${dbTable} SET ${data} WHERE ${fieldName} = '${fieldValue}'`; + } + // WHERE 前面是要修改的列名、列值,后面是条件的列名、列值 + return new Promise((resolve, reject) => { + // 修改表数据 + plus.sqlite.executeSql({ + name: this.dbName, + sql: sql, + success(e) { + resolve(e); + }, + fail(e) { + reject(e); + } + }) + }) + }, + + // 获取指定数据条数 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,这样就能一步一步的拿完所有的数据 + 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); + } + }) + }) + } +} diff --git a/pages/index/index.vue b/pages/index/index.vue index 531a665..6edbaf6 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -18,7 +18,7 @@ - + @@ -63,6 +63,7 @@ import SideBar from '@/components/sider-bar/slider-bar'; import HeadInfo from '@/components/head-info/head-info'; import sqlite from "../../common/sqlite.js" + import rSqlite from "../../common/rSqlite.js" import { mapActions } from 'vuex' @@ -148,21 +149,48 @@ } }) }, - insertChatRow() { + // insertChatRow() { + // let data = { + // id: 1, + // fromId: '123', + // toId: '321', + // content: 'bihao1', + // flag: 1 + // } + // data.id = Math.floor(Math.random() * 100); + // let dbTable = 'cesTable' + // // let sql = "insert into " + this.dbTable + " values('" + data.id + "','" + data.content + + // // "','" + data.fromId + "','" + data.toId + "'," + data.flag + ")"; + // let sql = "insert into " + dbTable + " values('" + data.id + "','" + + // data.content + "','" + data.fromId + "','" + data.toId + "','" + data.flag + "')"; + // this.executeSql(sql) + // }, + insertChatRowTwo() { let data = { id: 1, fromId: '123', - toId: '321', + toId: '321', content: 'bihao1', flag: 1 } + '1,123,411' + "'1','2','3'" data.id = Math.floor(Math.random() * 100); let dbTable = 'cesTable' - // let sql = "insert into " + this.dbTable + " values('" + data.id + "','" + data.content + - // "','" + data.fromId + "','" + data.toId + "'," + data.flag + ")"; - let sql = "insert into " + dbTable + " values('" + data.id + "','" + - data.content + "','" + data.fromId + "','" + data.toId + "','" + data.flag + "')"; - this.executeSql(sql) + let Arr = [] + for (let key in data) { + Arr.push(`'${data[key]}'`); + } + let Str = Arr.join(',') + + rSqlite.insertTableData(dbTable, Str).then((value) => { + // 在resolve时执行的回调函数 + console.log(value); // 输出:Hello, World! + this.executeSql(value) + }).catch((error) => { + // 在reject时执行的回调函数 + console.error(error); + }); }, // 查 executeSql(sql) { diff --git a/pages/test/ceshi.vue b/pages/test/ceshi.vue index 4e8045b..c70cfa3 100644 --- a/pages/test/ceshi.vue +++ b/pages/test/ceshi.vue @@ -164,11 +164,9 @@ }); }, executeSql(sql) { -<<<<<<< HEAD + sqlite.executeSqlCeshi(sql).then((value) => { -======= - Sqlite.executeSqlCeshi(sql).then((value) => { ->>>>>>> 99e78e950aa9ec6dccfe44174d8f77ac3239cf00 + // 在resolve时执行的回调函数 this.sqlData = value console.log(value); // 输出:Hello, World!