js+html5操作sqlite数据库的方法


Posted in Javascript onFebruary 02, 2016

本文实例讲述了js+html5操作sqlite数据库的方法。分享给大家供大家参考,具体如下:

//copyright by lanxyou lanxyou[at]gmail.com
var lanxDB=function(dbname){
  var db=openDatabase(dbname,'1.0.0','',65536);
  return{
    //返回数据库名
    getDBName:function(){
      return dbname;
    },
    //初始化数据库,如果需要则创建表
    init:function(tableName,colums){
      this.switchTable(tableName);
      colums.length>0?this.createTable(colums):'';
      return this;
    },
    //创建表,colums:[name:字段名,type:字段类型]
    createTable:function(colums){
      var sql="CREATE TABLE IF NOT EXISTS " + this._table ;
      var t;
      if (colums instanceof Array && colums.length>0){
        t=[];
        for (var i in colums){
          t.push(colums[i].name+' '+colums[i].type);
        }
        t=t.join(', ');
      }else if(typeof colums=="object"){
        t+=colums.name+' '+colums.type;
      }
      sql=sql+" ("+t+")";
      var that=this;
      db.transaction(function (t) { 
        t.executeSql(sql) ;
   })
    },
    //切换表
    switchTable:function(tableName){
      this._table=tableName;
      return this;
    },
    //插入数据并执行回调函数,支持批量插入
    //data为Array类型,每一组值均为Object类型,每一个Obejct的属性应为表的字段名,对应要保存的值
    insertData:function(data,callback){
      var that=this;
      var sql="INSERT INTO "+this._table;
      if (data instanceof Array && data.length>0){
        var cols=[],qs=[];
        for (var i in data[0]){
          cols.push(i);
          qs.push('?');
        }
        sql+=" ("+cols.join(',')+") Values ("+qs.join(',')+")";
      }else{
        return false;
      }
      var p=[],
        d=data,
        pLenth=0,
        r=[];
      for (var i=0,dLength=d.length;i<dLength;i++){
        var k=[];
        for (var j in d[i]){
          k.push(d[i][j]);
        }
        p.push(k);
      }
      var queue=function(b,result){
        if (result){
          r.push(result.insertId ||result.rowsAffected);
        }
        if (p.length>0){
          db.transaction(function (t) { 
            t.executeSql(sql,p.shift(),queue,that.onfail);
          })
        }else{
          if (callback){
            callback.call(this,r);
          }
        }
      }
      queue();
    },
    _where:'',
    //where语句,支持自写和以对象属性值对的形式
    where:function(where){
      if (typeof where==='object'){
        var j=this.toArray(where);
        this._where=j.join(' and ');
      }else if (typeof where==='string'){
        this._where=where;
      }
      return this;
    },
    //更新数据,data为属性值对形式
    updateData:function(data,callback){
      var that=this;
      var sql="Update "+this._table;
      data=this.toArray(data).join(',');
      sql+=" Set "+data+" where "+this._where;
      this.doQuery(sql,callback);
    },
    //根据条件保存数据,如果存在则更新,不存在则插入数据
    saveData:function(data,callback){
      var sql="Select * from "+this._table+" where "+this._where;
      var that=this;
      this.doQuery(sql,function(r){
        if (r.length>0){
          that.updateData(data,callback);
        }else{
          that.insertData([data],callback);
        }
      });
    },
    //获取数据
    getData:function(callback){
      var that=this;
      var sql="Select * from "+that._table;
      that._where.length>0?sql+=" where "+that._where:"";
      that.doQuery(sql,callback);
    },
    //查询,内部方法
    doQuery:function(sql,callback){
      var that=this;
      var a=[];
      var bb=function(b,result){
        if (result.rows.length){
          for (var i=0;i<result.rows.length;i++){
            a.push(result.rows.item(i));
          }
        }else{
          a.push(result.rowsAffected);
        }
        if (callback){
          callback.call(that,a);
        }
      }
      db.transaction(function (t) { 
        t.executeSql(sql,[],bb,that.onfail) ;
      })
    },
    //根据条件删除数据
    deleteData:function(callback){
      var that=this;
      var sql="delete from "+that._table;
      that._where.length>0?sql+=" where "+that._where:'';
      that.doQuery(sql,callback);
    },
    //删除表
    dropTable:function(){
      var sql="DROP TABLE IF EXISTS "+this._table;
      this.doQuery(sql);
    },
    _error:'',
    onfail:function(t,e){
      this._error=e.message;
      console.log('----sqlite:'+e.message);
    },
    toArray:function(obj){
      var t=[];
      obj=obj || {};
      if (obj){
        for (var i in obj){
          t.push(i+"='"+obj[i]+"'");
        }
      }
      return t;
    }
  }
}
/*
examples:
var db=new lanxDB('testDB');
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'}]);
db.init('feed_list',[{name:'parentid',type:'integer'},{name:'feed',type:'text'}]);
db.switchTable('channel_list').insertData([{name:'aa',link:'ss',updatetime:new Date().getTime()},{name:'bb',link:'kk',updatetime:new Date().getTime()}]);
db.where({name:'aa'}).getData(function(result){
  console.log(result);//result为Array
});
db.where({name:'aa'}).deleteData(function(result){
  console.log(result[0]);//删除条数
});
db.where({name:'bb'}).saveData({link:'jj'},function(result){
  console.log(result);//影响条数
})
})
*/

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Add a Picture to a Microsoft Word Document
Jun 15 Javascript
JavaScript入门教程(8) Location地址对象
Jan 31 Javascript
js 第二代身份证号码的验证机制代码
May 12 Javascript
jQuery点击弹出下拉菜单的小例子
Aug 01 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
jquery实现动态画圆
Dec 04 Javascript
JavaScript版的TwoQueues缓存模型
Dec 29 Javascript
跟我学习javascript的基本类型和引用类型
Nov 16 Javascript
vue中轮训器的使用
Jan 27 Javascript
JavaScript偏函数与柯里化实例详解
Mar 27 Javascript
Vue 组件修改根实例的数据的方法
Apr 02 Javascript
原生js canvas实现鼠标跟随效果
Aug 02 Javascript
详解Webwork中Action 调用的方法
Feb 02 #Javascript
JavaScript File API文件上传预览
Feb 02 #Javascript
javascript绘制漂亮的心型线效果完整实例
Feb 02 #Javascript
Webwork 实现文件上传下载代码详解
Feb 02 #Javascript
javascript自动切换焦点控制效果完整实例
Feb 02 #Javascript
原生js实现图片层叠轮播切换效果
Feb 02 #Javascript
Javascript实现的SHA-256加密算法完整实例
Feb 02 #Javascript
You might like
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
javascript数组去掉重复
2011/05/12 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
如何基于JS截获动态代码
2019/12/25 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
python按照多个条件排序的方法
2019/02/08 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
初中生学习的自我评价
2013/11/14 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
公司年底活动方案
2014/08/17 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
小型婚礼主持词
2015/06/30 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP