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 相关文章推荐
this[] 指的是什么内容 讨论
Mar 24 Javascript
基于jQuery的左右滚动实现代码
Dec 03 Javascript
Js四则运算函数代码
Jul 21 Javascript
Jquery 数据选择插件Pickerbox使用介绍
Aug 24 Javascript
js关闭父窗口时关闭子窗口
Apr 01 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
HTML Table 空白单元格补全的简单实现
Oct 13 Javascript
浅谈Javascript事件对象
Feb 05 Javascript
详解node.js平台下Express的session与cookie模块包的配置
Apr 26 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
Sep 18 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
Nov 20 Javascript
vue+iview实现手机号分段输入框
Mar 25 Vue.js
详解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中使用接口实现工厂设计模式的代码
2012/06/17 PHP
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php图像验证码生成代码
2017/06/08 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
玩转Koa之koa-router原理解析
2018/12/29 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
Python求解平方根的方法
2015/03/11 Python
Python算术运算符实例详解
2017/05/31 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
Python判断有效的数独算法示例
2019/02/23 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
python中format函数如何使用
2020/06/22 Python
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
小学后勤管理制度
2014/01/14 职场文书
迎新晚会主持词
2014/03/24 职场文书
培训讲师岗位职责
2014/04/13 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
企业读书活动总结
2014/06/30 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
初中中等生评语
2014/12/29 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
mysql 生成连续日期及变量赋值
2022/03/20 MySQL