/**
* 数据库操作帮助类
*/
(function() {
db = null;
/**
* 初始化数据库
*/
function initDB() {
if(db == null) {
openDB();
}
}
/**
* 打开数据库
* @param {Object} dbname 数据库名
* @param {Object} version 版本名
* @param {Object} description 描述文本
* @param {Object} dbsize 数据库大小
* @param {Object} callback 回调
*/
dbUtil.openDb = function(dbname, version, description, dbsize, callback) {
try {
if(!window.openDatabase) {
console.log('该浏览器不支持数据库');
return false;
}
db = window.openDatabase(dbname, version, description, dbsize);
return true;
} catch(e) {
if(e == 2) {
console.log("数据库版本无效");
} else {
console.log("未知错误 " + e + ".");
}
return false;
}
}
/**
* 创建数据库
* @param tableName 表名称
* @param fields 表字段
* @param constraint 约束或者字段的其他补充,可以为空,
* 格式如:{"id":"integer primary key autoincrement","app_flow_no":"not null"}
*/
dbUtil.createTable = function(tableName, fields, constraint) {
if(db == null) {
openDB();
}
var sql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (';
for(i in fields) {
var key = "";
if(typeof(constraint) != "undefined" && typeof(constraint[fields[i]]) != "undefined") {
key = " " + constraint[fields[i]];
}
sql += fields[i] + key + ",";
}
sql = sql.substr(0, sql.length - 1);
sql += ")";
//log(sql);
execSql(sql);
}
/**
* 插入数据
* @param tableName
* @param insertFields
* @param insertParams
*/
dbUtil.insert = function(tableName, insertFields, insertParams) {
var sql = "insert into " + tableName + " (";
var sql2 = " values(";
for(i in insertFields) {
sql += insertFields[i] + ",";
sql2 += "?,"
}
sql = sql.substr(0, sql.length - 1);
sql2 = sql2.substr(0, sql2.length - 1);
sql += ")";
sql2 += ")";
execSql(sql + sql2, insertParams);
}
/**
* 删除数据
* @param tableName
* @param whereStr
* @param wherParams
*/
dbUtil.delete = function(tableName, whereStr, wherParams) {
var sql = "delete from " + tableName;
if(typeof(whereStr) != "undefined" && typeof(wherParams) != "undefined" &&
whereStr != "") {
sql += " where " + whereStr;
}
execSql(sql, wherParams);
}
/**
* 更新数据
* @param tableName 表名称
* @param setFields 要更新的字段数组
* @param setParams 要更新的字段对应的参数数组
* @param whereStr where语句,如果没有可不传,不包含where关键字,参数用?代替,如:id=? and name=?
* @param wherParams where语句用到的参数数组,如['111','2222']
*/
dbUtil.update = function(tableName, setFields, setParams, whereStr, wherParams) {
var sql = "update " + tableName + " set ";
for(i in setFields) {
sql += setFields[i] + "=?,";
}
sql = sql.substr(0, sql.length - 1);
if(typeof(whereStr) != "undefined" && typeof(wherParams) != "undefined" &&
whereStr != "") {
sql += " where " + whereStr;
setParams = setParams.concat(wherParams);
}
execSql(sql, setParams);
}
dbUtil.select = function(tableName, selectFields, whereStr, wherParams, callback) {
if(db == null) {
openDB();
}
var sql = "SELECT " + selectFields + " FROM " + tableName;
if(typeof(whereStr) != "undefined" && typeof(wherParams) != "undefined" &&
whereStr != "") {
sql += " where " + whereStr;
}
db.transaction(function(tx) {
tx.executeSql(sql, wherParams, function(tx, results) {
if(results.rows.length < 1) {
if(typeof(callback) == 'function') {
callback(false)
} //没有数据
} else {
if(typeof(callback) == 'function') {
callback(results.rows)
}
}
}, function(tx, error) {
return false;
});
});
}
/**
* 添加数据
* @param {Object} tableName 添加数据的表名
* @param {Object} fields 添加的字段
* @param {Object} values 添加的值
*/
dbUtil.insert = function(tableName, fields, values) {
db.transaction(function(tx) {
if(!fields)
return;
var len = fields.length;
var condition = '';
for(var i = 0; i < len; i++) {
condition +=
}
var sql = 'insert into ' + tableName + '(' + fields.join() + ') values (' + values.join() + ')';
console.log(sql);
tx.executeSql(sql);
});
}
/**
* 插入或更新
* @param tableName
* @param insertFields
* @param insertParams
* @param key 根据该key来判断是否有数据
* @param keyVal
*/
dbUtil.saveOrUpdate = function(tableName, insertFields, insertParams, key, keyVal) {
if(typeof(key) != "undefined" && typeof(keyVal) != "undefined" &&
key != "") {
select(tableName, insertFields[0], key + "=?", [keyVal], function(rows) {
if(rows) {
updateTable(tableName, insertFields, insertParams, key + "=?", [keyVal]);
} else {
insertFields.push(key);
insertParams.push(keyVal);
insertTable(tableName, insertFields, insertParams);
}
})
} else {
insertTable(tableName, insertFields, insertParams);
}
}
/**
* 执行一段sql
* @param sql
*/
dbUtil.execSql = function(sql, param, callback) {
if(db == null) {
openDB();
}
db.transaction(function(tx) {
tx.executeSql(sql, param, function(tx, result) {
if(typeof(callback) == 'function') {
callback(true)
}
return true;
}, function(tx, error) {
if(typeof(callback) == 'function') {
callback(false)
}
console.log(error);
return false;
});
});
}
})(window.dbUtil = {});