[JavaScript] html5控制sqlite数据库的方法 →→→→→进入此内容的聊天室

来自 , 2020-07-21, 写在 JavaScript, 查看 131 次.
URL http://www.code666.cn/view/e35d7a57
  1. //copyright by lanxyou  lanxyou[at]gmail.com
  2. var lanxDB=function(dbname){
  3.         var db=openDatabase(dbname,'1.0.0','',65536);
  4.         return{
  5.                 //返回数据库名
  6.                 getDBName:function(){
  7.                         return dbname;
  8.                 },
  9.                 //初始化数据库,如果需要则创建表
  10.                 init:function(tableName,colums){
  11.                         this.switchTable(tableName);
  12.                         colums.length>0?this.createTable(colums):'';
  13.                         return this;
  14.                 },
  15.                 //创建表,colums:[name:字段名,type:字段类型]
  16.                 createTable:function(colums){
  17.                         var sql="CREATE TABLE IF NOT EXISTS " + this._table ;
  18.                         var t;
  19.                         if (colums instanceof Array && colums.length>0){
  20.                                 t=[];
  21.                                 for (var i in colums){
  22.                                         t.push(colums[i].name+' '+colums[i].type);
  23.                                 }
  24.                                 t=t.join(', ');
  25.                         }else if(typeof colums=="object"){
  26.                                 t+=colums.name+' '+colums.type;
  27.                         }
  28.                         sql=sql+" ("+t+")";
  29.                         var that=this;
  30.                         db.transaction(function (t) {
  31.                                 t.executeSql(sql) ;
  32.             })
  33.                 },
  34.                 //切换表
  35.                 switchTable:function(tableName){
  36.                         this._table=tableName;
  37.                         return this;
  38.                 },
  39.                 //插入数据并执行回调函数,支持批量插入
  40.                 //data为Array类型,每一组值均为Object类型,每一个Obejct的属性应为表的字段名,对应要保存的值
  41.                 insertData:function(data,callback){
  42.                         var that=this;
  43.                         var sql="INSERT INTO "+this._table;
  44.                         if (data instanceof Array && data.length>0){
  45.                                 var cols=[],qs=[];
  46.                                 for (var i in data[0]){
  47.                                         cols.push(i);
  48.                                         qs.push('?');
  49.                                 }
  50.                                 sql+=" ("+cols.join(',')+") Values ("+qs.join(',')+")";
  51.                         }else{
  52.                                 return false;
  53.                         }
  54.                         var p=[],
  55.                                 d=data,
  56.                                 pLenth=0,
  57.                                 r=[];
  58.                         for (var i=0,dLength=d.length;i<dLength;i++){
  59.                                 var k=[];
  60.                                 for (var j in d[i]){
  61.                                         k.push(d[i][j]);
  62.                                 }
  63.                                 p.push(k);
  64.                         }
  65.                         var queue=function(b,result){
  66.                                 if (result){
  67.                                         r.push(result.insertId ||result.rowsAffected);
  68.                                 }
  69.                                 if (p.length>0){
  70.                                         db.transaction(function (t) {
  71.                                                 t.executeSql(sql,p.shift(),queue,that.onfail);
  72.                                         })
  73.                                 }else{
  74.                                         if (callback){
  75.                                                 callback.call(this,r);
  76.                                         }
  77.                                 }
  78.                         }
  79.                         queue();
  80.                 },
  81.                 _where:'',
  82.                 //where语句,支持自写和以对象属性值对的形式
  83.                 where:function(where){
  84.                         if (typeof where==='object'){
  85.                                 var j=this.toArray(where);
  86.                                 this._where=j.join(' and ');
  87.                         }else if (typeof where==='string'){
  88.                                 this._where=where;
  89.                         }
  90.                         return this;
  91.                 },
  92.                 //更新数据,data为属性值对形式
  93.                 updateData:function(data,callback){
  94.                         var that=this;
  95.                         var sql="Update "+this._table;
  96.                         data=this.toArray(data).join(',');
  97.                         sql+=" Set "+data+" where "+this._where;
  98.                         this.doQuery(sql,callback);
  99.                 },
  100.                 //根据条件保存数据,如果存在则更新,不存在则插入数据
  101.                 saveData:function(data,callback){
  102.                         var sql="Select * from "+this._table+" where "+this._where;
  103.                         var that=this;
  104.                         this.doQuery(sql,function(r){
  105.                                 if (r.length>0){
  106.                                         that.updateData(data,callback);
  107.                                 }else{
  108.                                         that.insertData([data],callback);
  109.                                 }
  110.                         });
  111.                 },
  112.                 //获取数据
  113.                 getData:function(callback){
  114.                         var that=this;
  115.                         var sql="Select * from "+that._table;
  116.                         that._where.length>0?sql+=" where "+that._where:"";
  117.                         that.doQuery(sql,callback);
  118.                 },
  119.                 //查询,内部方法
  120.                 doQuery:function(sql,callback){
  121.                         var that=this;
  122.                         var a=[];
  123.                         var bb=function(b,result){
  124.                                 if (result.rows.length){
  125.                                         for (var i=0;i<result.rows.length;i++){
  126.                                                 a.push(result.rows.item(i));
  127.                                         }
  128.                                 }else{
  129.                                         a.push(result.rowsAffected);
  130.                                 }
  131.                                 if (callback){
  132.                                         callback.call(that,a);
  133.                                 }
  134.                         }
  135.                         db.transaction(function (t) {
  136.                                 t.executeSql(sql,[],bb,that.onfail) ;
  137.                         })
  138.                 },
  139.                 //根据条件删除数据
  140.                 deleteData:function(callback){
  141.                         var that=this;
  142.                         var sql="delete from "+that._table;
  143.                         that._where.length>0?sql+=" where "+that._where:'';
  144.                         that.doQuery(sql,callback);
  145.                 },
  146.                 //删除表
  147.                 dropTable:function(){
  148.                         var sql="DROP TABLE IF EXISTS "+this._table;
  149.                         this.doQuery(sql);
  150.                 },
  151.                 _error:'',
  152.                 onfail:function(t,e){
  153.                         this._error=e.message;
  154.                         console.log('----sqlite:'+e.message);
  155.                 },
  156.                 toArray:function(obj){
  157.                         var t=[];
  158.                         obj=obj || {};
  159.                         if (obj){
  160.                                 for (var i in obj){
  161.                                         t.push(i+"='"+obj[i]+"'");
  162.                                 }
  163.                         }
  164.                         return t;
  165.                 }
  166.         }
  167. }
  168.  
  169. /*
  170. examples:
  171. var db=new lanxDB('testDB');
  172. db.init('channel_list',[{name:'id',type:'integer primary key autoincrement'},{name:'name',type:'text'},{name:'link',type:'text'},{name:'cover',type:'text'},{name:'updatetime',type:'integer'},{name:'orders',type:'integer'}]);
  173. db.init('feed_list',[{name:'parentid',type:'integer'},{name:'feed',type:'text'}]);
  174. db.switchTable('channel_list').insertData([{name:'aa',link:'ss',updatetime:new Date().getTime()},{name:'bb',link:'kk',updatetime:new Date().getTime()}]);
  175. db.where({name:'aa'}).getData(function(result){
  176.         console.log(result);//result为Array
  177. });
  178. db.where({name:'aa'}).deleteData(function(result){
  179.         console.log(result[0]);//删除条数
  180. });
  181. db.where({name:'bb'}).saveData({link:'jj'},function(result){
  182.         console.log(result);//影响条数
  183. })
  184. })
  185. */
  186. //javascript/241

回复 "html5控制sqlite数据库的方法"

这儿你可以回复上面这条便签

captcha