PhoneGap HTML5 DB操作类, 做本地存储

类库优点:
1. 快速建表
2. 封装CURD操作,更加简洁
3. 兼容PhoneGap

4. 自己用着顺手,简化操作

void function(version){ 
     
    var app = function(e) {
        _this.DB;
    }
 
    /**
     * 初始化数据库 
     * @param {String} dbName
     * @param {String} dbVersion
     * @param {String} dbDesc
     * @param {String} dbSize
     */
    app.prototype.dbConnect = function(dbName,dbVersion,dbDesc,dbSize){
         
        try {
            if (!window.openDatabase) {
                console.log('Databases are not supported in this browser.');
                return false;
            } else {
                dbName      = dbName ? dbName : 'SHICAI_APP';
                dbVersion   = dbVersion ? dbVersion : '1.0';
                dbDesc      = dbDesc ? dbDesc : 'SHICAI_DB for User Mobile';
                dbSize      = dbSize ? dbSize : (2 * 1024 * 1024);
                 
                _this.DB = openDatabase(dbName, dbVersion, dbDesc, dbSize); 
                 
                return true;
            }
        } catch(e) {
            if (e == 2) {
                console.log("Invalid database version.");
            } else {
                console.log("Unknown error "+e+".");
            }
            return false;
        }
         
    }
     
    /**
     * 创建表
     * @param {String} tableName
     * @param {Object} tableField
     */
    app.prototype.dbDefineTable = function(tableName,tableField){
     
        if(!tableName || !tableField){
            console.log('ERROR: Function "dbCreateTable" tableName or tableField is NULL.');
        }
        var fieldArr = [];
        var fieldItem;
        var i = 0;
         
        for (var field in tableField){
            field.toString();
            tableField[field].toString();
            fieldArr[i] = field+' '+tableField[field];
             
            i++;
        }
        fieldItem = fieldArr.join(",").toString();
         
        var SQL = 'CREATE TABLE IF NOT EXISTS '+tableName+' (';
        SQL += fieldItem;
        SQL +=')';
        console.log(SQL);
         
        _this.DB.transaction(function(tx){
            tx.executeSql(SQL,[],function(tx,result){
                return true;
            },function(tx,error){
                console.log(error);
                return false;
            });
        }); 
    }
     
    /**
     * 插入数据
     * @param {String} tableName
     * @param {Object} tableField
     * @param {Function} funName
     */
    app.prototype.dbInsert = function(tableName,tableField,funName){
     
        if(!tableField){
            console.log('ERROR: FUNCTION dbInsert tableField is NULL');
            return false;
        }
         
        var fieldKeyArr = [];
        var fieldValueArr = [];
        var fieldKey;
        var fieldValue;
        var i = 0;
         
        for (var field in tableField){
         
            field.toString();
            tableField[field].toString();
            fieldKeyArr[i] = field;
            fieldValueArr[i] = tableField[field];
            if(typeof(fieldValueArr[i]) !== 'number'){
                fieldValueArr[i] = '"'+fieldValueArr[i]+'"';
            }
            i++;
        }
        fieldKey = fieldKeyArr.join(",");
        fieldValue = fieldValueArr.join(",");
 
        var SQL = 'INSERT INTO '+tableName+' (';
        SQL += fieldKey;
        SQL += ') ';
        SQL += 'VALUES (';
        SQL += fieldValue;
        SQL += ')';
        console.log(SQL); 
         
        _this.DB.transaction(function(tx){
            tx.executeSql(SQL,[],function(tx,result){
                funName(result);
            },function(tx,error){
                console.log(error);
                return false;
            });
        }); 
    }
     
    /**
     * 查询所有结果
     * @param {String}  tableName
     * @param {Function} funName
     * @param {Object}  tableField
     * @param {Object}  dbParams
     */
    app.prototype.dbFindAll = function(tableName,funName,tableField,dbParams){
 
        tableField = tableField ? tableField : '*';
        if(!tableName || !funName){
            console.log('ERROR: Function "dbFindAll" tableName or funName is NULL.');
        }
         
        var SQL = '';
        SQL +='SELECT '+tableField+' FROM '+tableName;
         
        _this.DB.transaction(function(tx){
            tx.executeSql(SQL,[],_findSuccess,function(tx,error){
                console.log(error);
                return false;
            });
        });
         
        function _findSuccess(tx,result){
            funName(result);
        }
 
    }
     
    /**
     * 删除数据
     * @param {String}  tableName
     * @param {Object}  dbParams
     * @param {Function} funName
     */
    app.prototype.dbDelete = function(tableName,dbParams,funName){
     
        if(!tableName || !dbParams){
            console.log('ERROR: FUNCTION "dbDelete" tableName or dbParams is NULL');
            return false;
        }
        var SQL = '';
        SQL +='DELETE FROM '+tableName+' WHERE ';
         
        var paramArr = new Array();
        var paramStr = '';
        var i=0;
        for(var k in dbParams){
            if(typeof(dbParams[k]) !== 'number'){
                dbParams[k] = '"'+dbParams[k]+'"';
            }
            paramArr[i] = k.toString()+'='+dbParams[k];
            i++;
        }
        paramStr = paramArr.join(" AND ");
        SQL += paramStr;
         
        _this.DB.transaction(function(tx){
                tx.executeSql(SQL);
            },[],function(tx,result){
                funName(result);
            },function(tx,error){
                console.log(error);
                return false;
            });
        console.log(SQL);
    }
     
    /**
     * 更新数据表
     * @param {String}  *tableName
     * @param {Object}  *dbParams
     * @param {Object}  *dbWhere
     * @param {Function} funName
     */
    app.prototype.dbUpdate = function(tableName,dbParams,dbWhere,funName){
 
        var SQL = 'UPDATE '+tableName+' SET ';
        var paramArr = new Array();
        var paramStr = '';
        var i=0;
        for(var k in dbParams){
            if(typeof(dbParams[k]) !== 'number'){
                dbParams[k] = '"'+dbParams[k]+'"';
            }
            paramArr[i] = k.toString()+'='+dbParams[k];
            i++;
        }
        paramStr = paramArr.join(" , ");
         
        SQL += paramStr;
        SQL += ' WHERE ';
         
        var whereArr = new Array();
        var whereStr = '';
        var n=0;
        for(var w in dbWhere){
             
            if(typeof(dbWhere[w]) !=='number'){
                dbWhere[n] = '"'+dbWhere[w]+'"';
            }
            whereArr[n] = w.toString()+'='+dbWhere[w];
            n++;
        }
         
        whereStr = whereArr.join(" AND ");
         
        SQL += whereStr;
         
        _this.DB.transaction(function(tx){
                tx.executeSql(SQL);
            },[],function(tx,result){
                funName(result);
            },function(tx,error){
                console.log(error);
                return false;
            });
        console.log(SQL);
         
    }
     
    /**
     * 清空数据表
     * @param {String} tableName
     * @return {Boolean}
     */
    app.prototype.dbTruncate = function(tableName){
     
        if(!tableName){
            console.log('ERROR:Table Name is NULL');
            return false;
        }
         
        function _TRUNCATE(tableName){
            _this.DB.transaction(function(tx){
                tx.executeSql('DELETE TABLE '+tableName);
            },[],function(tx,result){
                console.log('DELETE TABLE '+tableName);
                return true;
            },function(tx,error){
                console.log(error);
                return false;
            })
        }
         
        _TRUNCATE(tableName);
    }
     
    /**
     * @desc 删除数据表
     * @param {String} tableName
     * @return {Boolean}
     */
    app.prototype.dbDrop = function(tableName){
         
        if(!tableName){
            console.log('ERROR:Table Name is NULL');
            return false;
        }
         
        function _DROP(tableName){
            _this.DB.transaction(function(tx){
                tx.executeSql('DROP TABLE '+tableName);
            },[],function(tx,result){
                console.log('DROP TABLE '+tableName);
                return true;
            },function(tx,error){
                console.log(error);
                return false;
            })
        }
         
        _DROP(tableName);
    }
     
}('1.0');


posted @ 2012-05-30 14:41  范永强  阅读(268)  评论(0编辑  收藏  举报