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 相关文章推荐
jQuery使用手册之二 DOM操作
Mar 24 Javascript
javascript 在网页中的运用(asp.net)
Nov 23 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
Aug 13 Javascript
javascript鼠标滑过显示二级菜单特效
Nov 18 Javascript
使用伪命名空间封装保护独自创建的对象方法
Aug 04 Javascript
JavaScript日期选择功能示例
Jan 16 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 jQuery
使用D3.js+Vue实现一个简单的柱形图
Aug 05 Javascript
了解javascript中的Dom操作
May 27 Javascript
js实现适配移动端的拖动效果
Jan 13 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 Javascript
javascript使用正则表达式实现注册登入校验
Sep 23 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 ADODB使用方法集锦
2008/03/25 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
django从后台返回html代码的实例
2020/03/11 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
美国翻新电子产品商店:The Store
2019/10/08 全球购物
为什么使用接口?
2014/08/13 面试题
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
remote接口和home接口主要作用
2013/05/15 面试题
大四学生毕业自荐信
2013/11/07 职场文书
初入社会应届生求职信
2013/11/18 职场文书
个人现实表现材料
2014/02/04 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
专业见习报告范文
2014/11/03 职场文书
党内外群众意见范文
2015/06/02 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python