日期:2014-05-16  浏览次数:20426 次

Sencha Touch 2 结合HTML5的本地存储创建数据库实现增、删、改、查

大家好!我是范范。本人刚接触ST2到现在刚刚两个月,6月1号接的项目,那时才知道有Sencha Touch2这个东西,到现在两个月了期间的幸酸就不说了。今天说说在项目中用到的HTML5的本地存储。可能有的地方不是很合理,大家可以提出宝贵意见。下面开整:


下面是创建数据库的代码:database.js

var initDatabase = function(db,tables){

	for(var i=0;i<tables.length;i++){
		pmdb.createTable(db,tables[i],
			function(){ //成功后回调函数
				
			},
			function(tx, error){ //失败后回调函数
			console.log(i);
			}
		);
	}
};

var pmdb =
{
	//建表,在系统初始化时调用
	createTable:function (db,createSql,sucessCallback,failCallBack){
		if(!db) { 
			return ;
		}
		// 创建表  
		db.transaction( function(tx) {   
		    tx.executeSql(  
		        createSql,   //createSql
		        [],   //参数
		        sucessCallback,  //成功后回调函数 
		       	failCallBack     //失败后回调函数
		    );  
		});   
	},

	//执行,
	excute:function (db,sql,param,sucessCallback,failCallBack){
	     if(!db) { 
			return ;
		}
		db.transaction(function(tx) {   
			tx.executeSql(  
		        sql,   
			    param,   
			 	sucessCallback,  //成功后回调函数 
		       	failCallBack     //失败后回调函数
			);   
		}); 
	},

	//删除表
    drop: function(db,tableName) {
     	db.transaction(function (tx) {    
	    	tx.executeSql('DROP TABLE '+tableName);   
		});     
    },
     
	//打开数据库:一个用户一个数据库
	openDB: function (userName){
		var dbName= "PM_"+userName; 
	
		var dbVersion = "1.0" ;
		var dbSize = 1024 * 1024;
		var alia = "工程质量管理数据库";
		var db = openDatabase(dbName, dbVersion, alia, dbSize);   
		return db;
	}
	
	,
	//批量根据id删除数据
	deleteData: function(db,tableName,id,data,sucessCallback,failCallBack){
		if (!db) { 
              return; 
         }
         if(data.length>0){
	         var ids = "";
	         for(var index=0;index<data.length;index++){
	         	if(index==0){
	         		ids="'"+data[index][id]+"'";
	         	}else{
	         		ids+=",'"+data[index][id]+"'";
	         	}
	         }
	         var sql = "delete from " + tableName + " where "+id+" in ("+ids+")";
	         pmdb.excute(db,sql,[],sucessCallback,failCallBack); 
         }
	}
	,
	// 向数据库插入数据 
	insertData : function(db,tableName,field,data,sucessCallback,failCallBack) { 
         if (!db) { 
              return; 
         } 

         for (var index = 0; index < data.length; index++) { 
              var values = data[index]; 
              var value = pmdb.newArray(values, field);   // 将data数据转成Array 
              var fieldnew=newArrayFilds;
              var sql = "INSERT INTO " + tableName + " (" + fieldnew.join(",") 
                       + ") values " + "(" 
                       + new Array(fieldnew.length + 1).join(",?").substr(1) + ")"; 
               
              pmdb.excute(db,sql, value,sucessCallback,failCallBack); 
         }; 
         
         //
     }, 
	// 将data数据转成Array 
	newArray : function(data, filds) { 
         var newArray = new Array(); 
         var k=0;
         for (i = 0; i < filds.length; i++) { 
         	  if(i==0){newArrayFilds.length=0}
              name = filds[i]; 
              var fildData=data[name];
              if(fildData!=undefined&&fildData!=""){
              	if(newArray.length>0){
                newArray[k+1] = fildData;
                newArrayFilds[k+1]=name;
                k=k+1;
              }else{
              	newArray[k] = fildData;
                newArrayFilds[k]=name;
                
              }
             
            }             
         } 
         return newArray; 
     }
    

	
};
var newArrayFilds = new Array();

下面是建表的代码:CreateTable.js

//建表
var creatTables ={
    sqls :function(){
    	var tables = new Array(2);//表的个数
    	//基础数据表、参数表
	tables[0] = "CREATE TABLE IF