一个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浏览器运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值