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 研究心得 取得属性的值
Nov 30 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 Javascript
jQuery父级以及同级元素查找介绍
Sep 04 Javascript
JS实现为表格动态添加标题的方法
Mar 31 Javascript
javascript中Function类型详解
Apr 28 Javascript
AngularJS入门教程之AngularJS模型
Apr 18 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
May 23 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
Mar 03 Javascript
bootstrap table sum总数量统计实现方法
Oct 29 Javascript
js中apply和Math.max()函数的问题及区别介绍
Mar 27 Javascript
详解搭建es6+devServer简单开发环境
Sep 25 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
Nov 28 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
咖啡的植物学知识
2021/03/03 咖啡文化
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PHP获取文件行数的方法
2015/06/10 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
微信小程序排坑指南详解
2018/05/23 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
Python中os模块功能与用法详解
2020/02/26 Python
如何对python的字典进行排序
2020/06/19 Python
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
护理专业的自荐信
2013/10/22 职场文书
学习心得体会
2014/01/01 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
公司委托书格式范文
2014/04/04 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
超市员工辞职信范文
2015/05/12 职场文书
安全生产奖惩制度
2015/08/06 职场文书
关于教师节的广播稿
2015/08/19 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书