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 相关文章推荐
javascript在一段文字中的光标处插入其他文字
Aug 26 Javascript
JavaScript 获取用户客户端操作系统版本
Aug 25 Javascript
鼠标移动到图片名上,显示图片的简单实例
Jul 14 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
Jan 13 Javascript
在线所见即所得HTML编辑器的实现原理浅析
Apr 25 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
Jun 24 Javascript
JS实现回到页面顶部动画效果的简单实例
May 24 Javascript
jQuery操作cookie
Aug 08 Javascript
原生JS实现的碰撞检测功能示例
May 18 Javascript
layui动态绑定事件的方法
Sep 20 Javascript
js实现div色块碰撞
Jan 16 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
Nov 01 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程序实现支持页面后退的两种方法
2008/06/30 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
Python入门_条件控制(详解)
2017/05/16 Python
socket + select 完成伪并发操作的实例
2017/08/15 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
工程监理应届生求职信
2013/11/09 职场文书
主管会计岗位责任制
2014/02/10 职场文书
世博会口号
2014/06/20 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
python OpenCV学习笔记
2021/03/31 Python
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技