在之前,我写了一个websql的封装类库,代码如下:

(function(win) {
function smpWebSql(options){
options = options || {};
this.database = null;
this.DateBaseName = options.DateBaseName || 'SmpDB';
this.Version = options.Version || '1.0';
this.Description = options.Description || 'SmpDB';
this.DataBaseSize = options.DataBaseSize || 2 * 1024 * 1024;
this.init();
}
smpWebSql.prototype = {
init: function() {
this.database = openDatabase(this.DateBaseName, this.Version, this.Description, this.DataBaseSize); //初始化数据库
},
addBlob: function (tableName, arr,index,isFirst,callback) {//批量添加字段
/*
注 : 数据里面的第一个key存储类型为BLOB
@param tableName 表名
@param arr 更新的数据 [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
@param index BLOG字段所在的索引位置
@param isFirst 是否是第一次创建表
@param callback 回调
*/
if (arr == null) {
return this;
}
callback = this.isFunction(callback) ? callback : new Function();
var _me = this,
_db = this.database,
keyC = [],
keyI = [],
_key = '';
arr = arr || [];
if (arr && arr.constructor == Array) {
for (var i in arr[0]) {
keyC.push(i);
keyI.push(i);
}
_key = keyI.join(",");
index = index == undefined ? 0 : index;
keyC[index] = keyC[index] + ' BLOB';
_db.transaction(function (tx, result) {
//var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
//console.log('csql:' + csql);
if (isFirst == true) {
tx.executeSql('CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')');
}
//var sql = "";
for (var s = 0, _len = arr.length; s < _len ; s++) {
var _value = _me.split(arr[s]);
//sql += 'INSERT INTO ' + tableName + ' (' + _key + ') VALUES (' + _value + ')';
//console.log("sql:" + sql);
tx.executeSql('INSERT INTO ' + tableName + ' (' + _key + ') VALUES (' + _value + ')',[],function (tx, result) {
callback(result.rowsAffected);
//console.log('添加成功'+result.rowsAffected);
},function (tx, error) {
console.error('添加失败');
callback(false);
});
}
_key = keyI = keyC = null;
callback();
});
}
return this;
},
add: function (tableName, arr, callback, noKey) {//批量添加字段
/*
注 : 数据里面的第一个key 为主键
@param tableName 表名
@param arr 更新的数据 [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
@param callback 回调
@param noKey 第一个字段是否是主键(默认是)
*/
if(arr==null){
return this;
}
callback = this.isFunction(callback) ? callback : new Function();
var _me = this,
_db = this.database,
keyC = [],
keyI = [],
_key = '';
arr = arr || [];
if (arr && arr.constructor == Array) {
for(var i in arr[0]){
keyC.push(i);
keyI.push(i);
}
if (noKey==undefined) {
keyC[0] = keyC[0] + ' unique';
}
_key = keyI.join(",");
_db.transaction(function (tx) {
///var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
// console.log('csql:' + csql);
tx.executeSql('CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')');
//var sql = "";
for(var s = 0 , _len = arr.length; s < _len ; s++){
var _value = _me.split(arr[s]);
//sql += 'INSERT INTO ' + tableName + ' (' + _key + ') VALUES (' + _value + ')';
//console.log("sql:" + sql);
tx.executeSql('INSERT INTO '+tableName+' ('+_key+') VALUES ('+_value+')',[],function (tx, result) {
callback(result.rowsAffected);
//console.log('添加成功'+result.rowsAffected);
},function (tx, error) {
console.error('添加失败');
callback(false);
});
}
_key = keyI = keyC = null;
callback();
});
}
return this;
},
update : function(tableName,key,value,obj,callback){//更新指定数据
/*
@param tableName 表名
@param key 查询的键
@param value 对应键的值
@param obj 更新的数据 {key1:value1 , key2 : value2 ...}
@param callback 回调 传递参数为真则查询成功 反之更新失败
*/
callback = this.isFunction(callback) ? callback : new Function();
var _db = this.database,
_value = this.splitU(obj);
_db.transaction(function (tx) {
//console.log('sql:' + 'UPDATE ' + tableName + ' set ' + _value + ' where ' + key + '="' + value + '"')
tx.executeSql('UPDATE '+tableName+' set '+_value+' where '+key+'="'+value+'"',[],function (tx, result) {
callback(result.rowsAffected);
},function (tx, error) {
console.error('更新失败');
callback(false);
});
});
return this;
},
updateWhere: function (tableName, where, obj, callback) {//更新指定数据
/*
@param tableName 表名
@param 查询条件
@param obj 更新的数据 {key1:value1 , key2 : value2 ...}
@param callback 回调 传递参数为真则查询成功 反之更新失败
*/
callback = this.isFunction(callback) ? callback : new Function();
var _db = this.database,
_value = this.splitU(obj);
_db.transaction(function (tx) {
console.log('UPDATE ' + tableName + ' set ' + _value + ' where ' + where + '"')
tx.executeSql('UPDATE ' + tableName + ' set ' + _value + ' where ' + where + '"', [], function (tx, result) {
callback(result.rowsAffected);
}, function (tx, error) {
console.error('更新失败');
callback(false);
});
});
return this;
},
read : function(tableName,condition,callback){ //读取表数据
/*
@param tableName 表名
@param condition 查询条件 'where name="汪文君"'
@param callback 回调 传递参数为真则查询成功 反之查询失败
*/
var _condition = this.isString(condition) ? condition : '';
var _callback = this.isFunction(condition) ? condition : this.isFunction(callback) ? callback : new Function;
var _db = this.database,
_me = this,
_re = [];
_db.transaction(function (tx) {
tx.executeSql('SELECT * FROM ' + tableName + ' ' + _condition + ' ', [], function (tx, results) {
if(results && results.rows){
_re =_me.toArray(results.rows);
_callback(_re);
}else{
_callback([]);
}
},function(tx,error){
_callback([]);
console.error('查询失败');
});
});
return this;
},
remove:function(tableName,condition,callback){//删除数据
/*
@param tableName 表名
@param condition 查询条件 'where name="汪文君"'
@param callback 回调 传递参数为真则删除成功 反之删除失败
*/
var _me = this;
var _condition = this.isString(condition) ? condition : '';
var _callback = this.isFunction(condition) ? condition : this.isFunction(callback) ? callback : new Function;
_me.database.transaction(function (tx) {
tx.executeSql('DELETE FROM '+tableName+ ' '+ _condition+' ',[],function (tx, result) {
_callback(result.rowsAffected);
},function (tx, error) {
_callback(false);
console.error('删除失败');
});
});
},
counts: function (tableName, condition, callback) { //读取表数据
/*
@param tableName 表名
@param condition 查询条件 'where name="汪文君"'
@param callback 回调 传递参数为真则查询成功 反之查询失败
*/
var _condition = this.isString(condition) ? condition : '';
var _callback = this.isFunction(condition) ? condition : this.isFunction(callback) ? callback : new Function;
var _db = this.database,
_me = this,
_re = [];
if (mui.os.ios) { //ios下面特有的
_db.transaction(function (tx) {
tx.executeSql('SELECT NO FROM ' + tableName + ' ' + _condition + ' ', [], function (tx, results) {// count (*) as num
if (results && results.rows) {
_re = _me.toArray(results.rows);
_callback(_re.length);
} else {
_callback(0);
}
}, function (tx, error) {
_callback(0);
console.error('查询失败');
});
});
} else {
_db.transaction(function (tx) {
tx.executeSql('SELECT count (*) as num FROM ' + tableName + ' ' + _condition + ' ', [], function (tx, results) {// count (*) as num
if (results && results.rows) {
if (results.rows[0]) {
_callback(results.rows[0].num);
} else {
_callback(0);
}
} else {
_callback(0);
}
}, function (tx, error) {
_callback(0);
console.error('查询失败');
});
});
}
return this;
},
delTable:function(tableName,callback){ //删除数据表
callback = this.isFunction(callback) ? callback : new Function();
this.database.transaction(function(tx){
tx.executeSql('DROP TABLE IF EXISTS '+tableName,[],function(tx,res){
callback();
},function(tx,err){
console.error(err);
});
});
return this;
},
splitU: function(obj){//更新字符处理
var _arr = [];
for(var t in obj){
_arr.push(t+'="'+obj[t]+'"');
}
return _arr.join(',');
},
split : function(obj){//添加字符处理
var _arr = [];
for(var m in obj){
_arr.push("'"+obj[m]+"'");
}
return _arr.join(',');
},
isFunction : function(callback){
return typeof callback != 'undefined' && callback.constructor == Function ? true : false
},
isString : function(string){
return typeof string == 'string' ? true : false
},
toArray : function(obj){
var _arr = [],
_len = obj.length;
if(_len > 0){
for (var i = 0; i < _len; i++) {
_arr.push(obj.item(i));
};
}
return _arr;
}
}
win.smpWebSql = smpWebSql;
}(window))

  上述代码存在的问题非常明显,由于websql操作都是异步操作,当我们为了获取到websql操作的结果之后再进行后续操作时,往往是通过回调函数来实现的,当回调一多的时候,回调地狱就出现了,为了解决回调地狱问题,我将通过Promise来改写,后续调用时,可以直接通过await和async来调用,或者直接通过Promise链式调用也是可以的。

  现在我将通过ES6的语法重写之前的封装类,为了应用ES6中js面向对象的思想,我这里用到了class,最终代码如下:

import { browserVersions } from '@/utils/utils.js';
class SmpWebSql {
constructor(options) {
options = options || {};
this.database = null;
this.DateBaseName = options.DateBaseName || 'RedDB';
this.Version = options.Version || '1.0';
this.Description = options.Description || '智维离线工单数据库';
this.DataBaseSize = options.DataBaseSize || 2 * 1024 * 1024;
this.init();
}
/**
* 初始化数据库
*/
init() {
this.database = openDatabase(
this.DateBaseName,
this.Version,
this.Description,
this.DataBaseSize
);
}
/**
* 批量添加字段
* @param {*} tableName 表名
* @param {*} arr 更新的数据 [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
* @param {*} index BLOG字段所在的索引位置
* @param {*} isFirst 是否是第一次创建表
*/
addBlob(tableName, arr, index, isFirst = true) {
var _db = this.database;
var _me = this;
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
if (arr == null) {
return this;
}
var keyC = [];
var keyI = [];
var _key = '';
arr = arr || [];
if (arr && arr.constructor == Array) {
for (var i in arr[0]) {
keyC.push(i);
keyI.push(i);
}
keyC[0] = keyC[0] + ' unique';
_key = keyI.join(',');
index = index == undefined ? 0 : index;
keyC[index] = keyC[index] + ' BLOB';
// eslint-disable-next-line promise/param-names _db.transaction(function(tx, result) {
// var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
// console.log('csql:' + csql);
if (isFirst == true) {
tx.executeSql(
'CREATE TABLE IF NOT EXISTS ' +
tableName +
' (' +
keyC.join(',') +
')'
);
}
// var sql = "";
for (var s = 0, _len = arr.length; s < _len; s++) {
var _value = _me.split(arr[s]);
// sql += 'INSERT INTO ' + tableName + ' (' + _key + ') VALUES (' + _value + ')';
// console.log("sql:" + sql);
tx.executeSql(
'INSERT INTO ' +
tableName +
' (' +
_key +
') VALUES (' +
_value +
')',
[],
function(tx, result) {
resovle(result.rowsAffected);
console.log('添加成功' + result.rowsAffected);
},
function(tx) {
console.error('添加失败');
// eslint-disable-next-line prefer-promise-reject-errors
reject(false);
}
);
}
_key = keyI = keyC = null;
resovle(arr.length);
});
}
}).catch(error => {
console.log('error :', error);
});
}
/**
* 批量添加字段
* @param {*} tableName 表名
* @param {*} arr 更新的数据 [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
* @param {*} index BLOG字段所在的索引位置
* @param {*} firstKey firstKey 第一个字段是否是主键(默认是)
* @param {*} isFirst 是否是第一次创建表
*/
patchAddBlob(tableName, arr, index, firstKey = true, isFirst = true) {
var _db = this.database;
var _me = this;
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
if (arr == null) {
return this;
}
var keyC = [];
var keyI = [];
var _key = '';
arr = arr || [];
if (arr && arr.constructor == Array) {
for (var i in arr[0]) {
keyC.push(i);
keyI.push(i);
}
if (firstKey) {
keyC[0] = keyC[0] + ' unique';
}
_key = keyI.join(',');
index = index == undefined ? 0 : index;
keyC[index] = keyC[index] + ' text';
// eslint-disable-next-line promise/param-names _db.transaction(function(tx, result) {
// var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
// console.log('csql:' + csql);
if (isFirst == true) {
tx.executeSql(
'CREATE TABLE IF NOT EXISTS ' +
tableName +
' (' +
keyC.join(',') +
')'
);
}
var sql = '';
var _values = [];
for (var s = 0, _len = arr.length; s < _len; s++) {
_values.push('(' + _me.split(arr[s]) + ')');
}
sql =
'INSERT INTO ' +
tableName +
' (' +
_key +
') VALUES ' +
_values.join(',');
// console.log('sql:' + sql);
tx.executeSql(
sql,
[],
function(tx, result) {
resovle(result.rowsAffected);
// console.log('添加成功'+result.rowsAffected);
},
function(tx, error) {
console.error('添加失败', tx, error);
// eslint-disable-next-line prefer-promise-reject-errors
reject(false);
}
);
_key = keyI = keyC = null;
resovle(arr.length);
});
}
}).catch(error => {
console.log('error :', error);
});
}
/**
* 批量添加字段 注 : 数据里面的第一个key 为主键
* @param {*} tableName 表名
* @param {*} arr arr 更新的数据 [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
* @param {*} firstKey firstKey 第一个字段是否是主键(默认是)
*/
add(tableName, arr, firstKey = true) {
var _me = this;
var _db = this.database;
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
if (arr == null) {
return this;
}
var keyC = [];
var keyI = [];
var _key = '';
arr = arr || [];
if (arr && arr.constructor == Array) {
for (var i in arr[0]) {
keyC.push(i);
keyI.push(i);
}
if (firstKey) {
keyC[0] = keyC[0] + ' unique';
}
_key = keyI.join(',');
_db.transaction(function(tx) {
// /var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
// console.log('csql:' + csql);
tx.executeSql(
'CREATE TABLE IF NOT EXISTS ' +
tableName +
' (' +
keyC.join(',') +
')'
);
// var sql = "";
for (var s = 0, _len = arr.length; s < _len; s++) {
var _value = _me.split(arr[s]);
// sql += 'INSERT INTO ' + tableName + ' (' + _key + ') VALUES (' + _value + ')';
// console.log("sql:" + sql);
tx.executeSql(
'INSERT INTO ' +
tableName +
' (' +
_key +
') VALUES (' +
_value +
')',
[],
function(tx, result) {
resovle(result.rowsAffected);
// console.log('添加成功'+result.rowsAffected);
},
function(tx, error) {
console.error('添加失败', error);
// eslint-disable-next-line prefer-promise-reject-errors
reject(false);
}
);
}
_key = keyI = keyC = null;
resovle(arr.length);
});
}
}).catch(error => {
console.log('error :', error);
});
}
/**
* 批量添加行记录 注 : 数据里面的第一个key 为主键
* @param {*} tableName 表名
* @param {*} arr arr 更新的数据 [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
* @param {*} firstKey firstKey 第一个字段是否是主键(默认是)
*/
patchAdd(tableName, arr, firstKey = true) {
var _me = this;
var _db = this.database;
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
if (arr == null) {
return this;
}
var keyC = [];
var keyI = [];
var _key = '';
arr = arr || [];
if (arr && arr.constructor == Array) {
for (var i in arr[0]) {
keyC.push(i);
keyI.push(i);
}
if (firstKey) {
keyC[0] = keyC[0] + ' unique';
}
_key = keyI.join(',');
_db.transaction(function(tx) {
// /var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
// console.log('csql:' + csql);
tx.executeSql(
'CREATE TABLE IF NOT EXISTS ' +
tableName +
' (' +
keyC.join(',') +
')'
);
var sql = '';
var _values = [];
for (var s = 0, _len = arr.length; s < _len; s++) {
_values.push('(' + _me.split(arr[s]) + ')');
}
sql =
'INSERT INTO ' +
tableName +
' (' +
_key +
') VALUES ' +
_values.join(',');
console.log('sql:' + sql); tx.executeSql(
sql,
[],
function(tx, result) {
resovle(result.rowsAffected);
// console.log('添加成功'+result.rowsAffected);
},
function(tx, error) {
console.error('添加失败');
// eslint-disable-next-line prefer-promise-reject-errors
reject(false);
}
);
_key = keyI = keyC = null;
resovle(arr.length);
});
}
}).catch(error => {
console.log('error :', error);
});
}
/**
* 更新指定数据
* @param {*} tableName 表名
* @param {*} key 查询的键
* @param {*} value 对应键的值
* @param {*} obj obj 更新的数据 {key1:value1 , key2 : value2 ...}
*/
update(tableName, key, value, obj) {
var _db = this.database;
var _value = this.splitU(obj);
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
_db.transaction(function(tx) {
// console.log('sql:' + 'UPDATE ' + tableName + ' set ' + _value + ' where ' + key + '="' + value + '"')
tx.executeSql(
'UPDATE ' +
tableName +
' set ' +
_value +
' where ' +
key +
'="' +
value +
'"',
[],
function(tx, result) {
resovle(result.rowsAffected);
},
function(tx, error) {
console.error('更新失败');
// eslint-disable-next-line prefer-promise-reject-errors
reject(false);
}
);
});
}).catch(error => {
console.log('error :', error);
});
}
/**
* 更新指定数据
* @param {*} tableName 表名
* @param {*} condition 查询条件
* @param {*} obj obj 更新的数据 {key1:value1 , key2 : value2 ...}
*/
updateWhere(tableName, condition, obj) {
var _db = this.database;
var _value = this.splitU(obj);
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
_db.transaction(function(tx) {
console.log('UPDATE ' + tableName + ' set ' + _value + ' ' + condition);
tx.executeSql(
'UPDATE ' + tableName + ' set ' + _value + +' ' + condition,
[],
function(tx, result) {
resovle(result.rowsAffected);
},
function(tx, error) {
console.error('更新失败', error);
// eslint-disable-next-line prefer-promise-reject-errors
reject(false);
}
);
});
}).catch(error => {
console.log('error :', error);
});
}
/**
* 读取表数据
* @param {*} tableName 表名
* @param {*} condition 查询条件 'where name="jiekzou"'
*/
read(tableName, condition) {
var _db = this.database;
var _me = this;
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
var _condition = _me.isString(condition) ? condition : '';
var _re = [];
_db.transaction(function(tx) {
tx.executeSql(
'SELECT * FROM ' + tableName + ' ' + _condition + ' ',
[],
function(tx, results) {
if (results && results.rows) {
_re = _me.toArray(results.rows);
resovle(_re);
} else {
resovle([]);
}
},
function(tx, error) {
// eslint-disable-next-line prefer-promise-reject-errors
reject([]);
console.error('查询失败', error);
}
);
});
}).catch(error => {
console.log('error :', error);
});
}
/**
* 读取表数据
* @param {*} tableName 表名
* @param {*} field 查询字段,逗号隔开
* @param {*} condition 查询条件 'where name="jiekzou"'
*/
readField(tableName, field = '*', condition) {
var _db = this.database;
var _me = this;
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
var _condition = _me.isString(condition) ? condition : '';
var _re = [];
_db.transaction(function(tx) {
tx.executeSql(
'SELECT ' + field + ' FROM ' + tableName + ' ' + _condition + ' ',
[],
function(tx, results) {
if (results && results.rows) {
_re = _me.toArray(results.rows);
resovle(_re);
} else {
resovle([]);
}
},
function(tx, error) {
// eslint-disable-next-line prefer-promise-reject-errors
reject([]);
console.error('查询失败');
}
);
});
}).catch(error => {
console.log('error :', error);
});
}
/**
* 删除数据
* @param {*} tableName 表名
* @param {*} condition 查询条件 'where name="jiekzou"'
*/
remove(tableName, condition) {
var _me = this;
var _condition = _me.isString(condition) ? condition : '';
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
_me.database.transaction(function(tx) {
tx.executeSql(
'DELETE FROM ' + tableName + ' ' + _condition + ' ',
[],
function(tx, result) {
resovle(result.rowsAffected);
},
function(tx, error) {
// eslint-disable-next-line prefer-promise-reject-errors
reject(false);
console.error('删除失败');
}
);
});
}).catch(error => {
console.log('error :', error);
});
}
/**
* 根据查询条件读取表记录数
* @param {*} tableName 表名
* @param {*} condition 查询条件 'where name="jiekzou"'
*/
counts(tableName, condition) {
try {
if (browserVersions.android) {
return this.androidCounts(tableName, condition);
} else {
return this.iosCounts(tableName, condition);
}
} catch {
return 0;
}
}
// ios下面特有的
/**
* 读取表数据(ios下面特有的)
* @param {*} tableName 表名
* @param {*} condition 查询条件 'where name="jiekzou"'
*/
iosCounts(tableName, condition) {
var _db = this.database;
var _me = this;
var _condition = _me.isString(condition) ? condition : '';
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
var _re = [];
_db.transaction(function(tx) {
tx.executeSql(
'SELECT 1 FROM ' + tableName + ' ' + _condition + ' ',
[],
function(tx, results) {
// count (*) as num
if (results && results.rows) {
_re = _me.toArray(results.rows);
resovle(_re.length);
} else {
resovle(0);
}
},
function(tx, error) {
// eslint-disable-next-line prefer-promise-reject-errors
reject(0);
console.error('查询失败', error);
}
);
});
}).catch(e => {
console.log('e :', e);
// eslint-disable-next-line no-undef
// reject(0);
});
}
/**
* 读取表数据(Android)
* @param {*} tableName 表名
* @param {*} condition 查询条件 'where name="jiekzou"'
*/
androidCounts(tableName, condition) {
var _db = this.database;
var _me = this;
var _condition = _me.isString(condition) ? condition : '';
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
var _re = [];
_db.transaction(function(tx) {
tx.executeSql(
'SELECT count (*) as num FROM ' + tableName + ' ' + _condition + ' ',
[],
function(tx, results) {
// count (*) as num
if (results && results.rows) {
if (results.rows[0]) {
resovle(results.rows[0].num);
} else {
resovle(0);
}
} else {
resovle(0);
}
},
function(tx, error) {
// eslint-disable-next-line prefer-promise-reject-errors
reject(0);
console.error('查询失败');
}
);
});
}).catch(e => {
console.log('e :', e);
// eslint-disable-next-line no-undef
// reject(0);
});
}
/**
* 删除数据表
* @param {*} tableName 表名
*/
delTable(tableName) {
var _db = this.database;
console.log('_db :', _db);
// eslint-disable-next-line promise/param-names
return new Promise(function(resovle, reject) {
_db.transaction(function(tx) {
tx.executeSql(
'DROP TABLE IF EXISTS ' + tableName,
[],
function(tx, res) {
resovle(1);
},
function(tx, err) {
console.error(err);
// eslint-disable-next-line prefer-promise-reject-errors
reject(0);
}
);
});
});
}
// 更新字符处理
splitU(obj) {
var _arr = [];
for (var t in obj) {
_arr.push(t + '=\'' + obj[t] + '\'');
}
return _arr.join(',');
}
// 添加字符处理
split(obj) {
var _arr = [];
for (var m in obj) {
_arr.push('\'' + obj[m] + '\'');
}
return _arr.join(',');
}
isFunction(callback) {
return !!(
typeof callback != 'undefined' && callback.constructor == Function
);
}
isString(string) {
return typeof string == 'string';
}
toArray(obj) {
var _arr = [];
var _len = obj.length;
if (_len > 0) {
for (var i = 0; i < _len; i++) {
_arr.push(obj.item(i));
}
}
return _arr;
}
} export default SmpWebSql;

websql操作类封装的更多相关文章

  1. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  2. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  3. php-redis 操作类 封装

    <?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...

  4. 【PHP+Redis】 php-redis 操作类 封装

    <?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...

  5. c# Lambda操作类封装

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  6. [No0000DE]C# XmlHelper XML类型操作 类封装

    using System; using System.Data; using System.IO; using System.Text; using System.Threading; using S ...

  7. dapper 操作类封装

    using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using S ...

  8. [No0000DC]C# FileHelper 本地文件、文件夹操作类封装FileHelper

    using System; using System.Diagnostics; using System.IO; using System.Text; using Shared; namespace ...

  9. XML格式示例 与 XML操作(读取)类封装

    header('Content-Type: text/xml'); <?xml version="1.0" encoding="utf-8" standa ...

随机推荐

  1. [Poi2012]Festival 题解

    [Poi2012]Festival 时间限制: 1 Sec  内存限制: 64 MB 题目描述 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1 ...

  2. Image Classification

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  3. Lucene02--入门程序

    Lucene02--入门程序 开发准备: Win10 IDEA JDK1.8 1.新建一个普通的maven工程 1.1 添加依赖 <dependencies> <!-- Junit单 ...

  4. 简介SoftICE是Compuware NuMega公司1的产品,是目前公认最好的系统级调试工具

    简介SoftICE是Compuware NuMega公司1的产品,是目前公认最好的系统级调试工具

  5. 深度解密Go语言之channel

    目录 并发模型 并发与并行 什么是 CSP 什么是 channel channel 实现 CSP 为什么要 channel channel 实现原理 数据结构 创建 接收 发送 关闭 channel ...

  6. RabbitMQ实战(三)-高级特性

    0 相关源码 1 你将学到 如何保证消息百分百投递成功 幂等性 如何避免海量订单生成时消息的重复消费 Confirm确认消息.Return返回消息 自定义消费者 消息的ACK与重回队列 限流 TTL ...

  7. Shiro授权流程

    1,授权中涉及的一些概念      [1]授权:访问控制,即在应用中认证用户能否访问的系统资源(如一个页面,一个按钮等).      [2]资源:在Web应用中反应为用户可以访问的URL.       ...

  8. ASP.NET Core MVC 之视图(Views)

    ASP.NET Core MVC 控制器可以使用视图返回格式化的结果. 1.什么是视图 在 MVC 中,视图封装了用户与应用交互呈现细节.视图是具有生成要发送到客户端内容的,包含嵌入代码的HTML模板 ...

  9. React躬行记(11)——Redux基础

    Redux是一个可预测的状态容器,不但融合了函数式编程思想,还严格遵循了单向数据流的理念.Redux继承了Flux的架构思想,并在此基础上进行了精简.优化和扩展,力求用最少的API完成最主要的功能,它 ...

  10. AbstractCollection

    概述 这个类提供了实现Collection接口的骨架,来最小化实现此接口所做的工作. 要实现一个不可修改的 collection,编程人员只需扩展此类,并提供 iterator 和 size 方法的实 ...