原先想调用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浏览器运行。