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 相关文章推荐
Prototype使用指南之hash.js
Jan 10 Javascript
js禁止小键盘输入数字功能代码
Aug 01 Javascript
各种页面定时跳转(倒计时跳转)代码总结
Oct 24 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
在JavaScript中使用开平方根的sqrt()方法
Jun 15 Javascript
基于jquery实现表格内容筛选功能实例解析
May 09 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
Sep 01 Javascript
web 前端常用组件之Layer弹出层组件
Sep 22 Javascript
JS传参及动态修改页面布局
Apr 13 Javascript
js tab栏切换代码实例解析
Sep 03 Javascript
javaScript把其它类型转换为Number类型
Oct 13 Javascript
LayUi数据表格自定义赋值方式
Oct 26 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使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
PHP微信红包API接口
2015/12/05 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
php解决安全问题的方法实例
2019/09/19 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
TensorFlow变量管理详解
2018/03/10 Python
对pandas中Series的map函数详解
2018/07/25 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python实现学员管理系统
2019/02/26 Python
Python中turtle库的使用实例
2019/09/09 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
Keras loss函数剖析
2020/07/06 Python
python动态规划算法实例详解
2020/11/22 Python
python3处理word文档实例分析
2020/12/01 Python
法国在线药房:DoctiPharma
2020/10/21 全球购物
机械专业应届生求职信
2013/12/12 职场文书
弄虚作假心得体会
2014/09/10 职场文书
企业年会祝酒词
2015/08/11 职场文书
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫