热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[转]html5js访问sqlite数据库的操作类

本文转自:http:blog.csdn.nettsxw24articledetails7613815webkit核心的浏览器提供了3个api接口,用于访问本地sqlite数据,但

本文转自:http://blog.csdn.net/tsxw24/article/details/7613815

webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使用起来很不方便 故而做这个js封装,以方便使用

 

参考文章:

sqlite API 说明  

http://www.mhtml5.com/resources/html5-js-api%E6%95%99%E7%A8%8B%EF%BC%88%E4%B8%89%EF%BC%89-%E6%9C%AC%E5%9C%B0%E6%95%B0%E6%8D%AE%E5%BA%93

另外的操作类 

 http://levi.cg.am/?p=1679

sqlite 语法

http://blog.csdn.net/ejzhang/article/details/6224915

 

[Javascript] view plain copy print?
  1. /** 
  2.  * js 操作数据库类 
  3.  *  
  4.  * @author 肖武  
  5.  */  
  6.   
  7. /** 
  8.  * 1、数据库名(mydb) 
  9.  
  10. 2、版本号(1.0) 
  11.  
  12. 3、描述(Test DB) 
  13.  
  14. 4、数据库大小(2*1024*1024)  
  15.  */  
  16. var DB = function( db_name, size ){  
  17.      var _db = openDatabase(db_name, '1.0.0','', size );  
  18.        
  19.      return {  
  20.            
  21.          /** 
  22.           * 执行sql,回调返回影响条数 
  23.           */  
  24.          execute:function( sql, param, callback ) {  
  25.              //参数处理  
  26.             if( !param ){  
  27.                 param = [];  
  28.             }else if(typeof param == 'function' ){  
  29.                 callback = param;  
  30.                 param = [];  
  31.             }  
  32.                
  33.              this.query( sql, param, function(result){  
  34.                  if( typeof callback == 'function' ){  
  35.                      callback(result.rowsAffected);  
  36.                  }  
  37.              });  
  38.          },  
  39.   
  40.          /** 
  41.           * 执行sql,回调返回sql查询对象 
  42.           * 查询时,有数据返回数组,无数据返回0 
  43.           * 增删改时:返回int,影响条数 
  44.           * void query( string[, function]) 
  45.           * void query( string[, array[, function]]) 
  46.           */  
  47.          query:function(sql, param, callback){  
  48.             //参数处理  
  49.             if( !param ){  
  50.                 param = [];  
  51.             }else if(typeof param == 'function' ){  
  52.                 callback = param;  
  53.                 param = [];  
  54.             }  
  55.               
  56.             var self=this;  
  57.             //只有一个参数  
  58.             _db.transaction(function (tx) {  
  59.                 //4个参数:sql,替换sql中问号的数组,成功回调,出错回调  
  60.                 tx.executeSql(sql,param,function(tx,result){  
  61.                     if (typeof callback == 'function' ){  
  62.                         callback(result);  
  63.                     }  
  64.                 },self.onfail) ;  
  65.             })  
  66.         },  
  67.         /** 
  68.          * 插入,回调返回last id 
  69.          * void insert( string, object[, function]) 
  70.          */  
  71.         insert:function( table, data, callback ){  
  72.             if( typeof data != 'object' && typeof callback == 'function' ){  
  73.                 callback(0);  
  74.             }  
  75.               
  76.             var k=[];  
  77.             var v=[];  
  78.             var param=[];  
  79.             for(var i in data ){  
  80.                 k.push(i);  
  81.                 v.push('?');  
  82.                 param.push(data[i]);  
  83.             }  
  84.             var sql="INSERT INTO "+table+"("+k.join(',')+")VALUES("+v.join(',')+")";  
  85.               
  86.             this.query(sql, param, function(result){  
  87.                 if ( typeof callback == 'function' ){  
  88.                     callback(result.insertId);  
  89.                 }  
  90.             });  
  91.         },  
  92.         /** 
  93.          * 修改,回调返回影响条数 
  94.          * void update( string, object[, string[, function]]) 
  95.          * void update( string, object[, string[, array[, function]]]) 
  96.          */  
  97.         update:function( table, data, where, param, callback ){  
  98.             //参数处理  
  99.             if( !param ){  
  100.                 param = [];  
  101.             }else if(typeof param == 'function' ){  
  102.                 callback = param;  
  103.                 param = [];  
  104.             }  
  105.               
  106.             var set_info = this.mkWhere(data);  
  107.             for(var i=set_info.param.length-1;i>=0; i--){  
  108.                 param.unshift(set_info.param[i]);  
  109.             }  
  110.             var sql = "UPDATE "+table+" SET "+set_info.sql;  
  111.             if( where ){  
  112.                 sql += " WHERE "+where;  
  113.             }  
  114.               
  115.             this.query(sql, param, function(result){  
  116.                 if( typeof callback == 'function' ){  
  117.                     callback(result.rowsAffected);  
  118.                 }  
  119.             });  
  120.         },  
  121.           
  122.         /** 
  123.          * 删除 
  124.          * void toDelete( string, string[, function]]) 
  125.          * void toDelete( string, string[, array[, function]]) 
  126.          */  
  127.         toDelete:function( table, where, param, callback ){  
  128.             //参数处理  
  129.             if( !param ){  
  130.                 param = [];  
  131.             }else if(typeof param == 'function' ){  
  132.                 callback = param;  
  133.                 param = [];  
  134.             }  
  135.               
  136.             var sql = "DELETE FROM "+table+" WHERE "+where;  
  137.             this.query(sql, param, function(result){  
  138.                 if( typeof callback == 'function' ){  
  139.                     callback(result.rowsAffected);  
  140.                 }  
  141.             });  
  142.         },  
  143.           
  144.         /** 
  145.          * 查询,回调返回结果集数组 
  146.          * void fetch_all( string[, function] ) 
  147.          * void fetch_all( string[, param[, function]] ) 
  148.          */  
  149.         fetchAll:function( sql, param, callback ){  
  150.             //参数处理  
  151.             if( !param ){  
  152.                 param = [];  
  153.             }else if(typeof param == 'function' ){  
  154.                 callback = param;  
  155.                 param = [];  
  156.             }  
  157.               
  158.             this.query( sql, param, function(result){  
  159.                 if (typeof callback == 'function' ){  
  160.                     var out=[];  
  161.                       
  162.                     if (result.rows.length){  
  163.                         for (var i=0;i
  164.                             out.push(result.rows.item(i));  
  165.                         }  
  166.                     }  
  167.                   
  168.                     callback(out);  
  169.                 }  
  170.             });  
  171.         },  
  172.           
  173.         /** 
  174.          * 查询表的信息 
  175.          * table_name: 表名称,支持 % *, 
  176.          */  
  177.         showTables:function( table_name, callback){  
  178.             this.fetchAll("select * from sqlite_master where type='table' and name like ?", [table_name], callback);  
  179.         },  
  180.           
  181.           
  182.         /** 
  183.          * 组装查询条件 
  184.          */  
  185.         mkWhere:function(data){  
  186.             var arr=[];  
  187.             var param=[];  
  188.             if( typeof data === 'object' ){  
  189.                 for (var i in data){  
  190.                     arr.push(i+"=?");  
  191.                     param.push(data[i]);  
  192.                 console.log('data.i:'+i);  
  193.                 }  
  194.             }  
  195.             return {sql:arr.join(' AND '),param:param};  
  196.         },  
  197.           
  198.         /** 
  199.          * 错误处理 
  200.          */  
  201.         onfail:function(tx,e){  
  202.             console.log('sql error: '+e.message);  
  203.         }  
  204.      }  
  205. }  
  206.   
  207. /* 
  208. //使用示例: 
  209. //1.获取db对象,连接数据库 test,分配2M大小 
  210. var db = new DB('test',1024*1024*2); 
  211.  
  212. //2.创建表 
  213. d.query("CREATE TABLE ids (id integer primary key autoincrement , ctime integer)"); 
  214.  
  215. //3.查看已经创建的表,支持表名通配符搜索。如:"%"查询所有表,"user_%"查询"user_"开头的表 
  216. db.showTables("%",function(ret){console.log(ret)}) 
  217.  
  218. //4.查询表里数据 
  219. db.fetchAll('select * from ids',function(ret){console.log(ret)}); 
  220.  
  221. //5.修改 
  222. db.update('ids',{ctime:123},"id=?",[1],function(ret){console.log(ret)}); 
  223.  
  224. //6.删除 
  225. db.toDelete('ids',"id=?",[1],function(ret){console.log(ret)}); 
  226.  
  227. //7.其它,如删表 
  228. db.query('drop table ids'); 
  229.  
  230.  */  

 


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
author-avatar
mobiledu2502910337
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有