| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616 |
- var dbName = ''
- var dbPath = ''
- var dbFilePath = ''
- const andStr = ' and '
- const orStr = ' or '
- const kongStr = ' '
- const douStr = ','
- // 事务操作
- const transactionBeginStr = 'begin'
- const transactionCommitStr = 'commit'
- const transactionRollbackStr = 'rollback'
- const dbNameKey = 'ljw_db_name_sqlite_key'
- const dbFilePathKey = 'ljw_db_file_path_sqlite_key'
- /**
- * 初始化和开启数据库
- */
- export const initDB = async (name) => {
- // 获取应用操作路径
- const dbDir = await new Promise((resolve, reject) => {
- plus.io.requestFileSystem(plus.io.PRIVATE_DOC, res => {
- console.log('requestFileSystem--res--' + res)
- res.root.getDirectory('db', {
- create: true
- }, res => {
- console.log('getDirectory--res--' + res.fullPath)
- resolve(res.fullPath)
- }, rej => {
- console.error('getDirectory--' + rej)
- reject(rej)
- });
- }, rej => {
- console.error('requestFileSystem--' + rej)
- reject(rej)
- })
- })
- console.log('dbDir--', dbDir)
- // 保存路劲
- dbName = name
- dbPath = dbDir
- dbFilePath = dbPath + dbName + '.db'
- // 存储一次
- uni.setStorageSync(dbNameKey, dbName)
- uni.setStorageSync(dbFilePathKey, dbFilePath)
- const isOpen = plus.sqlite.isOpenDatabase({
- name: dbName,
- path: dbFilePath
- });
- if (!isOpen) {
- // 开启数据库
- const status = await new Promise((resolve, reject) => {
- plus.sqlite.openDatabase({
- name: dbName,
- path: dbFilePath,
- success: function(e) {
- console.log('数据库成功开启');
- resolve(true)
- },
- fail: function(e) {
- console.error('数据库开启失败--', JSON.stringify(e));
- reject(e)
- }
- });
- })
- return status
- } else {
- console.log('数据库已是开启状态!')
- return true
- }
- }
- /**
- * 关闭数据库
- */
- export const closeDB = (db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.closeDatabase({
- name: dbNameBack(db_name),
- success: function(res) {
- console.log('数据库关闭ok')
- resolve(true)
- },
- fail: function(e) {
- if (e.message.includes('Not Open')) {
- resolve(true)
- } else {
- console.error('数据库关闭fail', e)
- }
- }
- })
- })
- }
- /**
- * 开启数据库
- */
- export const openDB = async (db_name = '', db_FilePath = '') => {
- const isOpen = plus.sqlite.isOpenDatabase({
- name: dbNameBack(db_name),
- path: dbFilePathBack(db_FilePath)
- });
- if (!isOpen) {
- // 开启数据库
- const status = await new Promise((resolve, reject) => {
- plus.sqlite.openDatabase({
- name: dbNameBack(db_name),
- path: dbFilePathBack(db_FilePath),
- success: function(e) {
- console.log('数据库成功开启');
- resolve(true)
- },
- fail: function(e) {
- console.error('数据库开启失败--', JSON.stringify(e));
- reject(e)
- }
- });
- })
- return status
- } else {
- console.log('数据库已是开启状态!')
- return true
- }
- }
- /**
- * 新建表 开启数据库后,如果想立即执行,则需要放到initDB 回调函数 或者 使用await
- *
- `CREATE TABLE if not exists ${EPsqlite.FA_QUESTION} (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- template_id INTEGER NOT NULL DEFAULT 0,
- appuser_id INTEGER DEFAULT 0,
- status TEXT DEFAULT '1'
- )`
- */
- export const createTable = (sql, db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.executeSql({
- name: dbNameBack(db_name),
- sql: sql,
- success: function(e) {
- console.log('createTable success!');
- resolve(true)
- },
- fail: function(e) {
- console.log('createTable failed: ' + JSON.stringify(e));
- reject(e)
- }
- });
- })
- }
- /**
- * 插入数据
- */
- export const insertData = (tableName, datas, db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.executeSql({
- name: dbNameBack(db_name),
- sql: disponseInsertData(tableName, datas),
- success: function(e) {
- console.log('insertData success!');
- resolve(e)
- },
- fail: function(e) {
- console.log('insertData failed: ' + JSON.stringify(e));
- reject(e)
- }
- });
- })
- }
- /**
- * 查询数据
- * order by xx desc/asc
- * group by xx
- */
- export const queryData = (tableName, where, suffixSql = '', db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.selectSql({
- name: dbNameBack(db_name),
- sql: disponseQueryData(tableName, where) + kongStr + suffixSql,
- success: function(e) {
- console.log('queryData success!', e);
- resolve(sucData(e))
- },
- fail: function(e) {
- console.log('queryData failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- /**
- * 查询数据page
- * order by xx desc/asc
- * group by xx
- */
- export const queryDataPage = (tableName, where = {}, suffixSql = '', db_name = '') => {
- return new Promise((resolve, reject) => {
- queryDataCount(tableName, where).then(res => {
- let total = res.data
- let pageNo = where.pageNo || 1
- let pageSize = where.pageSize || 10
- let index = (pageNo - 1) * pageSize
- plus.sqlite.selectSql({
- name: dbNameBack(db_name),
- sql: disponseQueryData(tableName, where) + kongStr + suffixSql + kongStr +
- `limit ${index},${pageSize}`,
- success: function(e) {
- console.log('queryDataPage success!', e);
- resolve(sucData(e, total))
- },
- fail: function(e) {
- console.log('queryDataPage failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- })
- }
- /**
- * 查询数据总数
- */
- export const queryDataCount = (tableName, where, db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.selectSql({
- name: dbNameBack(db_name),
- sql: disponseQueryDataCount(tableName, where),
- success: function(e) {
- console.log('queryDataPage success!', e);
- resolve(sucData(e[0].total))
- },
- fail: function(e) {
- console.log('queryDataPage failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- /**
- * 查询数据原味sql
- */
- export const selectSqlData = (where, db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.selectSql({
- name: dbNameBack(db_name),
- sql: where,
- success: function(e) {
- console.log('selectSqlData success!', e);
- resolve(sucData(e))
- },
- fail: function(e) {
- console.log('selectSqlData failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- /**
- * 执行增删改等操作语句数据原味sql
- * 清空表数据 同时清空了自增id TRUNCATE TABLE tableName;
- * 删除表 DROP TABLE IF EXISTS tableName;
- */
- export const executeSqlData = (where, db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.executeSql({
- name: dbNameBack(db_name),
- sql: where,
- success: function(e) {
- console.log('executeSqlData success!', e);
- resolve(sucData(e))
- },
- fail: function(e) {
- console.log('executeSqlData failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- /**
- * 更新数据
- */
- export const updateData = (tableName, update, where, db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.executeSql({
- name: dbNameBack(db_name),
- sql: disponseUpdateData(tableName, update, where),
- success: function(e) {
- console.log('updateData success!', e);
- resolve(sucData(e))
- },
- fail: function(e) {
- console.log('updateData failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- /**
- * 删除数据
- */
- export const deleteData = (tableName, where, db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.executeSql({
- name: dbNameBack(db_name),
- sql: disponseDeleteData(tableName, where),
- success: function(e) {
- console.log('deleteData success!', e);
- resolve(sucData(e))
- },
- fail: function(e) {
- console.log('deleteData failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- /**
- * 检查表是否存在
- */
- export const checkTable = (tableName, db_name = '') => {
- return new Promise((resolve, reject) => {
- plus.sqlite.selectSql({
- name: dbNameBack(db_name),
- sql: 'select name from sqlite_master where type="table" and name=' + packageStr(tableName),
- success: function(e) {
- console.log('checkTable success!', e);
- resolve(true)
- },
- fail: function(e) {
- console.log('checkTable failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- /**
- * 包装执行事务:支持同步/异步回调
- * packageTransaction(()=>{
- insertDataLJW('fa_user', {name:'wxyqaz'})
- })
- */
- export const packageTransaction = async (callback, db_name = '') => {
- if (typeof callback !== 'function') {
- console.error('callback 必须是一个函数');
- return;
- }
- try {
- // 开启事务
- await transactionBegin(db_name);
- // 执行回调(支持异步)
- const result = await callback();
- // 提交事务
- await transactionCommit(db_name);
- if (objectIsEmpty(result)) {
- result = true
- }
- console.log('packageTransaction -- 事务提交成功', result);
- return result;
- } catch (error) {
- // 回滚事务
- await transactionRollback(db_name);
- console.error('事务执行失败,已回滚。错误内容:', error);
- // 可选:重新抛出错误供外部处理
- throw error;
- }
- };
- /**
- * -------------------------------------------------------------------------------------------------------------------------------------------------
- * * -------------------------------------------------------------------------------------------------------------------------------------------------
- * * -------------------------------------------------------------------------------------------------------------------------------------------------
- * * -------------------------------------------------------------------------------------------------------------------------------------------------
- * * -------------------------------------------------------------------------------------------------------------------------------------------------
- */
- const packageStr = (str)=>{
- return '"' + str + '"'
- }
- const transactionBegin = (db_name = '') => {
- return new Promise((resolve, reject) => {
- // 开启事务
- plus.sqlite.transaction({
- name: dbNameBack(db_name),
- operation: transactionBeginStr,
- success: function(e) {
- console.log('transaction begin success!', e);
- resolve(e)
- },
- fail: function(e) {
- console.log('transaction begin failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- const transactionCommit = (db_name = '') => {
- return new Promise((resolve, reject) => {
- // 提交事务
- plus.sqlite.transaction({
- name: dbNameBack(db_name),
- operation: transactionCommitStr,
- success: function(e) {
- console.log('transaction commit success!', e);
- resolve(e)
- },
- fail: function(e) {
- console.log('transaction commit failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- const transactionRollback = (db_name = '') => {
- return new Promise((resolve, reject) => {
- // 回滚事务
- plus.sqlite.transaction({
- name: dbNameBack(db_name),
- operation: transactionRollbackStr,
- success: function(e) {
- console.log('transaction rollback success!', e);
- resolve(e)
- },
- fail: function(e) {
- console.log('transaction rollback failed: ' + JSON.stringify(e));
- reject(failData(e.code, e.message))
- }
- });
- })
- }
- const disponseInsertData = (tableName, datas) => {
- if (Array.isArray(datas)) {
- let arr = [...datas]
- var sql = 'insert into ' + tableName + ' (' + Object.keys(arr[0]).join(',') + ') values '
- var valueSql = ''
- for (const map of arr) {
- valueSql += '('
- for (const key of Object.keys(map)) {
- const value = map[key]
- if (typeof value == 'string') {
- valueSql += '"' + value + '"' + ','
- } else {
- valueSql += value + ','
- }
- }
- valueSql = valueSql.substring(0, valueSql.length - 1) + '),'
- }
- sql += valueSql.substring(0, valueSql.length - 1)
- return sql
- } else {
- let map = {
- ...datas
- }
- var sql = 'insert into ' + tableName + ' (' + Object.keys(map).join(',') + ') values ('
- for (const key of Object.keys(map)) {
- const value = map[key]
- if (typeof value == 'string') {
- sql += '"' + value + '"' + ','
- } else {
- sql += value + ','
- }
- }
- sql = sql.substring(0, sql.length - 1) + ')'
- return sql
- }
- }
- const disponseDeleteData = (tableName, where) => {
- var sql = `delete from ${tableName} where `
- if (typeof where == 'string') {
- sql += where
- } else {
- let map = {
- ...where
- }
- var valueSql = ''
- for (const key of Object.keys(map)) {
- const value = map[key]
- valueSql += key + '='
- if (typeof value == 'string') {
- valueSql += '"' + value + '"' + andStr
- } else {
- valueSql += value + andStr
- }
- }
- valueSql = valueSql.substring(0, valueSql.length - andStr.length)
- sql += valueSql
- }
- return sql
- }
- const disponseUpdateData = (tableName, update, where) => {
- var sql = `update ${tableName} set `
- if (typeof update == 'string') {
- sql += update
- } else {
- let map = {
- ...update
- }
- var valueSql = ''
- for (const key of Object.keys(map)) {
- const value = map[key]
- valueSql += key + '='
- if (typeof value == 'string') {
- valueSql += '"' + value + '"' + douStr
- } else {
- valueSql += value + douStr
- }
- }
- valueSql = valueSql.substring(0, valueSql.length - douStr.length)
- sql += valueSql
- }
- if (!objectIsEmpty(where)) {
- sql += kongStr + 'where' + kongStr
- if (typeof where == 'string') {
- sql += where
- } else {
- let map = {
- ...where
- }
- var valueSql = ''
- for (const key of Object.keys(map)) {
- const value = map[key]
- valueSql += key + '='
- if (typeof value == 'string') {
- valueSql += '"' + value + '"' + andStr
- } else {
- valueSql += value + andStr
- }
- }
- valueSql = valueSql.substring(0, valueSql.length - andStr.length)
- sql += valueSql
- }
- }
- return sql
- }
- const disponseQueryData = (tableName, where) => {
- return disponseQuerySql(tableName, where)
- }
- const disponseQueryDataCount = (tableName, where) => {
- return disponseQuerySql(tableName, where, 'count(1) as total')
- }
- const disponseQuerySql = (tableName, where, sel = '*') => {
- var sql = `select ${sel} from ` + tableName
- if (objectIsEmpty(where)) {
- return sql
- }
- if (typeof where == 'string') {
- sql += kongStr + 'where' + kongStr + where
- } else {
- let map = {
- ...where
- }
- var valueSql = ''
- for (const key of Object.keys(map)) {
- if (key === 'pageNo' || key === 'pageSize') {
- continue
- }
- const value = map[key]
- valueSql += key + '='
- if (typeof value == 'string') {
- valueSql += '"' + value + '"' + andStr
- } else {
- valueSql += value + andStr
- }
- }
- valueSql = valueSql.substring(0, valueSql.length - andStr.length)
- sql += kongStr + 'where' + kongStr + valueSql
- }
- return sql
- }
- const sucData = (data, total = 0) => {
- return {
- code: 0,
- msg: 'ok',
- data: data,
- total: total
- }
- }
- const failData = (code = -1, msg = 'fail') => {
- return {
- code: -1,
- msg: msg
- }
- }
- const dbNameBack = (db_name = '') => {
- let name = objectIsEmpty(db_name) ? dbName : db_name
- if (objectIsEmpty(name)) {
- name = uni.getStorageSync(dbNameKey)
- }
- return name
- }
- const dbFilePathBack = (db_filePath = '') => {
- let filePath = objectIsEmpty(db_filePath) ? dbFilePath : db_filePath
- if (objectIsEmpty(filePath)) {
- filePath = uni.getStorageSync(dbFilePathKey)
- }
- return filePath
- }
- /**
- * 空判断
- */
- const objectIsEmpty = (obj) => {
- if (obj === undefined || obj === null) {
- return true
- }
- if (typeof obj === 'string') {
- return obj.trim().length === 0
- }
- if (Array.isArray(obj)) {
- return obj.length === 0
- }
- if (Object.prototype.toString.call(obj) === '[object Object]') {
- return Object.keys(obj).length === 0
- }
- return false
- }
|