一個websql操作類

 原先想調用websql儲存一定量的數據,於是寫了這麼一段代碼,類jQuery鏈式操作,操作非常順暢,卻沒想到頁面一刷新,卵都毛了。哎,不是規範的,還是儘量少研究啊。不說了,說多了都是淚。現記錄下這段代碼,以備參考。

想要持久儲存,估計要麼就localStory或indexDb了,回頭再研究了。

if(!die)var die=function(str){alert(str);return false;}
var xdb={
  dbh:'',table:'',fields:'*',condition:'1',orders:'',limits:'',cb:function(tx,rt){ console.log(tx,rt);},err:function(error){ console.log(error);},
  open:function(dbname,ver,desc/*描述*/,size){
    if(!ver)ver='1.0';
    if(!desc)desc='';
    if(!size)size=5;//mb
    this.dbh=openDatabase(dbname,ver,desc, size * 1024 * 1024);
    this.table='';this.fields='*';this.condition='1';this.orders='';this.limits='';
  },
  //設置表
  from:function(tableName){ this.table=tableName;this.fields='*';this.condition='1';this.orders='';this.limits='';return this;},
  field:function(fields){ this.fields=fields;return this;},
  where:function(condition){ this.condition=condition;return this; },
  order:function(str){ this.orders=' order by '+str;return this;},
  limit:function(start,end){ this.limits=' limit '+start+' '+end;return this;},
  select:function(cb){
    if(typeof(cb)!='function')cb=this.cb;
    var sql='select '+this.fields+' from '+this.table+' where '+this.condition+this.orders+this.limits;
    this.dbh.transaction(function (tx) {
      tx.executeSql(sql,[],function(tx,rt){ cb(rt.rows);},this.err);
    });
  },
  exec:function(sql,data,cb){
    if(!sql)return die('未輸入sql語句');
    data=typeof(data)=='object'?data:[];
    cb=typeof(cb)=='function'?cb:this.cb;
    this.dbh.transaction(function (tx) {
      tx.executeSql(sql,data,cb,this.err);
    });
  },
  save:function(strs,data,cb){
    if(!this.table)return die('未指定數據表');
    if(!strs)return die('未指定更新的數據');
    var sql='update '+this.table+' set '+strs+' where '+this.condition+this.order+this.limit;
    data=typeof(data)=='object'?data:[];
    cb=typeof(cb)=='function'?cb:null;
    this.dbh.transaction(function (tx){
      tx.executeSql(sql,data,cb,this.err);
    });
  },
  add:function(d,cb){
    if(!this.table)return die('未指定數據表');
    if(typeof(d)!='object')return die('未指定添加的數據');
    var keys=[],vals=[],v1=[];
    for(itm in d){
      keys.push(itm);vals.push(d[itm]);v1.push('?')
    }
    var sql='replace into '+this.table+'('+keys.join(',')+') values ('+v1.join(',')+')';
    cb=typeof(cb)=='function'?cb:null;
    this.dbh.transaction(function (tx) {
      tx.executeSql(sql,vals,cb,this.err);
    });    
  },
  'delete':function(cb){
    if(!this.table)return die('未指定數據表');    
    var sql='delete from '+this.table+' where '+this.condition+this.order+this.limit;
    cb=typeof(cb)=='function'?cb:null;
    this.dbh.transaction(function (tx) {
      tx.executeSql(sql,[],cb,this.err);
    });
  }
};
//使用方法
xdb.open('mydb');
xdb.exec("create table if not exists test (id unique,text)");//創建表
xdb.from('test');//關聯數據表
xdb.add({id:1,text:'測試1test'});//新增
xdb.add({id:2,text:'測試2test'});//新增
xdb.where('id=1').delete();//刪除
xdb.where('id=2').save('text="修改 2edit"');//修改
//查詢
var r=xdb.from('test').field('*').where('id=2');
r.select(function(d){console.log(d);});


以上代碼可直接貼到chrome瀏覽器運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章