websql操作类封装
在之前,我写了一个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操作类封装的更多相关文章
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- php-redis 操作类 封装
<?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...
- 【PHP+Redis】 php-redis 操作类 封装
<?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...
- c# Lambda操作类封装
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- [No0000DE]C# XmlHelper XML类型操作 类封装
using System; using System.Data; using System.IO; using System.Text; using System.Threading; using S ...
- dapper 操作类封装
using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using S ...
- [No0000DC]C# FileHelper 本地文件、文件夹操作类封装FileHelper
using System; using System.Diagnostics; using System.IO; using System.Text; using Shared; namespace ...
- XML格式示例 与 XML操作(读取)类封装
header('Content-Type: text/xml'); <?xml version="1.0" encoding="utf-8" standa ...
随机推荐
- python PEP8常用规范
python 常用PEP8规范 一 代码编排 1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号 ...
- 1. 全文搜索框架 Haystack
1.什么是Haystack Haystack是django的开源全文搜索框架(全文检索不同于特定字段的模糊查询,使用全文检索的效率更高 ),该框架支持Solr,Elasticsearch,Whoosh ...
- android_sdcard读写(一)
现在的android手机其实就是一个小小的掌上电脑,平时电脑有的硬件它估计也有了.这次本人研究下了其中充当手机硬盘的角色,就是sdcard.这是一个保存应用程序的好地方. 老规矩,上代码,学习代码才是 ...
- Python选修第00次作业:缘分
先说一说我与Python的缘分吧.初识Python,是在高三上学期.从那位同学那里经过时,看到了他桌子上的一本书——<和小卡特一起学Python>,封面就很吸引人,便买来一本,累了不想做题 ...
- 用Python和Pandas以及爬虫技术统计历史天气
背景 最近在计划明年从北京rebase到深圳去,所以最近在看深圳的各个方面.去年在深圳呆过一段时间,印象最深的是,深圳总是突然就下雨,还下好大的雨.对于我这种从小在南方长大但是后面又在北京呆了2年多的 ...
- SpringBoot开发案例Nacos配置管理中心
前言 在开发过程中,通常我们会配置一些参数来实现某些功能,比如是否开启某项服务,告警邮件配置等等.一般会通过硬编码.配置文件或者数据库的形式实现. 那么问题来了,如何更加优雅的实现?欢迎来到 Naco ...
- win10虚拟机搭建Hadoop集群(已完结)
1 在虚拟机安装 Ubuntu 2 安装网络工具 Ubuntu最小化安装没有 ifconfig命令 sudo apt-get install net-tools 3 Ubuntu修改网卡名字 修改网卡 ...
- Python版:Selenium2.0之WebDriver学习总结_实例1
Python版:Selenium2.0之WebDriver学习总结_实例1 快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 实属转载:本人看的原文地址 :http:/ ...
- Python—三目运算
Python 可通过 if 语句来实现三目运算的功能,因此可以近似地把这种 if 语句当成三目运算符.作为三目运算符的 if 语句的语法格式如下: (True_statements) if (expr ...
- Spring 源码注解
一.@Retention可以用来修饰注解,是注解的注解,称为元注解. Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolic ...