PhoneGap HTML5 DB操作類, 做本地存儲

jopen 12年前發布 | 31K 次閱讀 PhoneGap 移動開發

類庫優點:</span>
1. 快速建表</span>
2. 封裝CURD操作,更加簡潔</span>
3. 兼容PhoneGap</span>
</span></span>

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');</pre></span></span></span></span>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!