本文转自: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

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

[转]html5 js 访问 sqlite 数据库的操作类的更多相关文章

  1. 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

  2. 【Android】13.2 使用自定义的CursorAdapter访问SQLite数据库

    分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 SQliteDemo1的例子演示了SimpleCursorAdapter的用法,本节我们将使用用途更广的自定义的游 ...

  3. 【Android】13.1 用Android自带的API访问SQLite数据库

    分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 这一节我们先来看看如何直接用Android自带的API创建和访问SQLite数据库. 1.创建SQLite数据库 ...

  4. 【Android】13.0 第13章 创建和访问SQLite数据库—本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 Android 内置了三种数据存取方式:SQLite数据库.文件.SharedPreferences. 这一章我们 ...

  5. 并发访问sqlite数据库出现databse is locked的错误的一个解决办法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在并发访问sqlite数据库会出现这样一个错误:databseis locked,这是sqlite数据库对并发支持不太 ...

  6. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

  7. 【C#】使用EF访问Sqlite数据库

    原文:[C#]使用EF访问Sqlite数据库 1. 先上Nuget下载对应的包 如图,搜索System.Data.SQLite下载安装即可,下载完之后带上依赖一共有这么几个: EntityFramew ...

  8. 以EntifyFramework DBFirst方式访问SQLite数据库

    前面一直在找EF Code First方式来访问SQLite数据库,后面得出的结论是SQLite不支持 Code First, 虽然有非官方的库SQLite.CodeFirst可以使用,但一直没搞成功 ...

  9. Qt5 开发 iOS 应用之访问 SQLite 数据库

    开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1   源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...

随机推荐

  1. spring常用注解使用解析

    spring没有采用约定优于配置的策略,spring要求显示指定搜索哪些路径下的Java文件.spring将会把合适的java类全部注册成spring Bean.   问题:spring怎么知道把哪些 ...

  2. HTML5 Maker – 在线轻松制作 HTML5 动画效果

    HTML5 Maker 是一个在线动画制作工具,帮助你使用 HTML,CSS 和 JavaScript 创建动态,互动的内容.它非常容易使用,同时可以帮你实现非常好的效果.它可以制作跨浏览器的动画内容 ...

  3. VS2012 asp.net mvc 4 运行项目提示:"错误消息 401.2。: 未经授权: 服务器配置导致登录失败"

    创建mvc4 应用程序发布,运行出错.出现未经授权: 服务器配置导致登录失败.请验证您是否有权基于您提供的凭,后来找得解决方法: 打开点站的web.confg文件,将: <authorizati ...

  4. ArcGIS Server 10.1发布数据源为ArcSDE(直连)的MXD【转】

    因为ArcSDE10.1基本默认直连,所以我们在发布直连的MXD仍然需要注意相关的事宜. 1:保证两台机器都能够访问共享存储的信息 2:确保已UNC路径保存ArcCatalog的文件夹连接,而且直连的 ...

  5. 在SharePoint 2013中显示“以其他用户身份登录”

    在我新建了SharePoint 2013的网站后, 发现界面与2010有一些不同,比如缺少了“以其他用户身份登录”,这给我的测试带来很大不便. 在找了一些国外网站后,终于找到了解决方法 第一步: 找到 ...

  6. 微信小程序开发之如何哪获取微信小程序的APP ID

    微信小程序的开发工具,在新建项目的时候,默认提示填写APP ID,如果不填写AppID 也是可以本地测试和开发的,但是无法通过手机调试,只能在开发工具里查看 如果需要真机调试微信小程序,需要安装微信6 ...

  7. 停止运行ExecutorService中的线程

    while(true){ try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch bloc ...

  8. iOS开发之UISearchBar初探

    iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...

  9. Node异步I/O、事件驱动与高性能服务器

    事件循环.观察者.请求对象.I/O线程池这四者共同构成了Node异步I/O模型的基本要素. 异步I/O流程:

  10. 学习 Mysql - 在linux上使用yum安装MySQL

    1.检查已经安装的mysql信息 yum list installed mysql*rpm -qa | grep mysql* 2.列出已安装和可安装的mysql信息 yum list mysql* ...