对websql的常用操作进行了一个封装,项目是基于phonegap的,不过phonegap默认已经集成了数据库操作的插件,所以无需再配置什么,直接用就可以了:

  1. /**
  2. *数据库操作辅助类,定义对象、数据操作方法都在这里定义
  3. */
  4. var dbname='mydb';
  5. var version='1.1';
  6. var dbdesc='mydb';
  7.  
  8. var table_picture='be_picture';
  9.  
  10. var dbsize=30000;
  11. var db=null;
  12.  
  13. /**
  14. * 打开数据库
  15. * @returns {Boolean}
  16. */
  17. function openDB(callback){
  18. try{
  19. if (!window.openDatabase) {
  20. console.log('该浏览器不支持数据库');
  21. return false;
  22. }
  23. db = window.openDatabase(dbname, version, dbdesc, dbsize);
  24. return true;
  25. }catch(e){
  26. if(e==2){
  27. console.log("数据库版本无效");
  28. }else{
  29. console.log("未知错误 "+e+".");
  30. }
  31. return false;
  32. }
  33. }
  34.  
  35. /**
  36. * 执行一段sql
  37. * @param sql
  38. */
  39. function execSql(sql,param,callback){
  40. if(db==null){openDB();}
  41. db.transaction(function(tx) {
  42. tx.executeSql(sql,param, function(tx, result) {
  43. if(typeof(callback) == 'function') {callback(true)}
  44. return true;
  45. }, function(tx, error) {
  46. if(typeof(callback) == 'function') {callback(false)}
  47. console.log(error);
  48. return false;
  49. });
  50. });
  51. }
  52.  
  53. var pictureFields=[
  54. 'id',
  55. 'app_flow_no',
  56. 'ptr_type',
  57. 'ptr_name',
  58. 'ptr_address',
  59. 'blurred',
  60. 'original',
  61. 'local_address'
  62. ]
  63.  
  64. /**
  65. * 初始化数据库
  66. */
  67. function initDB(){
  68. if(db==null){openDB();}
  69. createTable(table_picture,pictureFields,{"id":"primary key","app_flow_no":"not null"});
  70. }
  71.  
  72. /**
  73. * 创建数据库
  74. * @param tableName 表名称
  75. * @param fields 表字段
  76. * @param constraint 约束或者字段的其他补充,可以为空,
  77. * 格式如:{"id":"integer primary key autoincrement","app_flow_no":"not null"}
  78. */
  79. function createTable(tableName,fields,constraint){
  80.  
  81. if(db==null){openDB();}
  82. var sql = 'CREATE TABLE IF NOT EXISTS '+tableName+' (';
  83. for(i in fields){
  84. var key = "";
  85. if(typeof(constraint)!="undefined" && typeof(constraint[fields[i]]) !="undefined"){
  86. key = " "+constraint[fields[i]];
  87. }
  88. sql+=fields[i]+key+",";
  89. }
  90. sql = sql.substr(0,sql.length-1);
  91. sql += ")";
  92. //log(sql);
  93. execSql(sql);
  94. }
  95.  
  96. /**
  97. * 更新数据
  98. * @param tableName 表名称
  99. * @param setFields 要更新的字段数组
  100. * @param setParams 要更新的字段对应的参数数组
  101. * @param whereStr where语句,如果没有可不传,不包含where关键字,参数用?代替,如:id=? and name=?
  102. * @param wherParams where语句用到的参数数组,如['111','2222']
  103. */
  104. function updateTable(tableName,setFields,setParams,whereStr,wherParams){
  105. var sql = "update "+tableName+" set ";
  106. for(i in setFields){
  107. sql+=setFields[i]+"=?,";
  108. }
  109. sql = sql.substr(0,sql.length-1);
  110. if(typeof(whereStr)!="undefined" && typeof(wherParams)!="undefined"
  111. && whereStr!=""){
  112. sql += " where " + whereStr;
  113. setParams = setParams.concat(wherParams);
  114. }
  115. execSql(sql,setParams);
  116. }
  117.  
  118. /**
  119. * 插入数据
  120. * @param tableName
  121. * @param insertFields
  122. * @param insertParams
  123. */
  124. function insertTable(tableName,insertFields,insertParams){
  125. var sql = "insert into "+tableName+" (";
  126. var sql2 = " values(";
  127. for(i in insertFields){
  128. sql+=insertFields[i]+",";
  129. sql2 +="?,"
  130. }
  131. sql = sql.substr(0,sql.length-1);
  132. sql2 = sql2.substr(0,sql2.length-1);
  133. sql += ")";
  134. sql2 += ")";
  135. execSql(sql+sql2,insertParams);
  136. }
  137.  
  138. /**
  139. * 删除数据
  140. * @param tableName
  141. * @param whereStr
  142. * @param wherParams
  143. */
  144. function deleteRow(tableName,whereStr,wherParams){
  145. var sql = "delete from "+tableName;
  146. if(typeof(whereStr)!="undefined" && typeof(wherParams)!="undefined"
  147. && whereStr!=""){
  148. sql += " where " + whereStr;
  149. }
  150. execSql(sql,wherParams);
  151. }
  152.  
  153. /**
  154. * 查询
  155. * @param tableName
  156. * @param selectFields select的字段,用逗号分开,如果全部传"*"
  157. * @param whereStr where语句,参数用?代替
  158. * @param wherParams 参数数组
  159. * @callback 必填,返回的对象会放在callback函数作为参数传递
  160. */
  161. function select(tableName,selectFields,whereStr,wherParams,callback){
  162. if(db==null){openDB();}
  163. var sql = "SELECT "+selectFields+" FROM "+tableName;
  164. if(typeof(whereStr)!="undefined" && typeof(wherParams)!="undefined"
  165. && whereStr!=""){
  166. sql += " where " + whereStr;
  167. }
  168. db.transaction(function(tx){
  169. tx.executeSql(sql,wherParams,function(tx,results){
  170. if(results.rows.length<1){
  171. if (typeof(callback) == 'function') {callback(false)} //没有数据
  172. }else{
  173. if(typeof(callback) == 'function') {callback(results.rows)}
  174. }
  175. },function(tx,error){
  176. return false;
  177. });
  178. });
  179. }
  180.  
  181. /**
  182. * 插入或更新
  183. * @param tableName
  184. * @param insertFields
  185. * @param insertParams
  186. * @param key 根据该key来判断是否有数据
  187. * @param keyVal
  188. */
  189. function saveOrUpdate(tableName,insertFields,insertParams,key,keyVal){
  190. if(typeof(key)!="undefined" && typeof(keyVal)!="undefined"
  191. && key!=""){
  192. select(tableName,insertFields[0],key+"=?",[keyVal],function(rows){
  193. if(rows){
  194. updateTable(tableName,insertFields,insertParams,key+"=?",[keyVal]);
  195. }else{
  196. insertFields.push(key);
  197. insertParams.push(keyVal);
  198. insertTable(tableName,insertFields,insertParams);
  199. }
  200. })
  201. }else{
  202. insertTable(tableName,insertFields,insertParams);
  203. }
  204. }

查询:

  1. select(table_picture,"*","id=?",[id],function(rows){
  2. if(rows){
  3. //如果查询到数据
  4. }
  5. })

注意:因为websql是异步执行的,要获取到返回的结果然后进一步操作,需要传入回调函数,如上面的function(rows)....

插入或者更新:

  1. saveOrUpdate(table_picture,['id','app_flow_no','original','ptr_type','ptr_name'],[pic.id,pic.appFlowNo,pic.original,pic.ptrType,pic.ptrName],'id',pic.id);

删除:

  1. deleteRow(table_picture,"id=?",[123])

转自:http://blog.csdn.net/linshutao/article/details/21398483

websql的使用/phonegap操作数据库 sqlite的更多相关文章

  1. QT 操作数据库SQLite实例

    #include "widget.h" #include <QApplication> #include <QtSql> #include <QTex ...

  2. iOS - SQLite Database 操作数据库

    iOS - SQLite Database 操作数据库   Sqlite 能被用在ios上做数据处理用,只要你懂得一点sql 就很容易使用sqlite 1:创建一个简单的View based appl ...

  3. iOS基础 - 数据库-SQLite

    一.iOS应用数据存取的常用方式 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data(以面向对象的方式操作数据 ...

  4. 数据库-SQLite

    技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong  数据库-SQLite 技术博客http:// ...

  5. sqlite:多线程操作数据库“database is locked”解决方法(二)

    上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...

  6. Qt之操作数据库(SQLite)

    SQLite 简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 ...

  7. iOS 数据储存--SQLite 操作数据库-FMDB,sqlite数据类型,保存图片,demo

    1.SQLite 语句中 数据类型的储存 /* 不区分大小写 char(长度).字符串 NULL. 空值 INTEGER. 整型 REAL.浮点型 TEXT.文本类型 BLOB. 二进制类型,用来存储 ...

  8. Qt之操作数据库(SQLite)实例

    QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持.QSqlDatabase对象象征了数据库的关联.Qt使用驱动 ...

  9. android: SQLite使用 SQL 操作数据库

    虽然 Android 已经给我们提供了很多非常方便的 API 用于操作数据库,不过总会有一些 人不习惯去使用这些辅助性的方法,而是更加青睐于直接使用 SQL 来操作数据库.这种人 一般都是属于 SQL ...

随机推荐

  1. 奇怪吸引子---Lorenz

    奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...

  2. 《学习opencv》笔记——矩阵和图像操作——cvAnd、cvAndS、cvAvg and cvAvgSdv

    矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 cons ...

  3. NModbus类库使用

    通过串口进行通信 : 1.将 NMobus 类库导入工程中,添加引用.命名空间.工程属性必须配置 为 .NET 4.0. 2.创建 SerialPort 类的一个实例,配置参数,打开串口,如: pub ...

  4. 树莓派3中编译Opencv3.4.10

    一.命令 -dev libv4l-dev libavcodec-dev libavformat-dev libswscale-dev cd wget http://sourceforge.net/pr ...

  5. !HDU 1574 RP-dp-(重点在状态确定)

    题意:有n件事.每件事若发生有两种情况.添加RP为a,可是收益会降低c:降低R为a,收益会添加c. 每件事可以发生的前提是小于等于或者大于等于门限值b.求最大收益. 分析:这题我没找到状态,所以就不会 ...

  6. Chrome F12 温故而知新 :因为重定向导致清空Network信息

    虽然我以前都是用Fiddler 4来作为解决方案.但实际上可以勾选 [Preserve log]来保存日志 这样就不担心因为页面重定向导致清空了日志了

  7. 爬虫 需要什么样的 CPU,内存 和带宽

    所有的需求都看这个图片吧,这个就是我爬取一个网站所用的服务器和服务器资源的消耗情况.

  8. KVM上如何让虚拟机支持虚拟化(kvm虚拟化的嵌套)

    http://blog.csdn.net/swimming_in_it_/article/details/53320141http://blog.csdn.net/wickedglory/articl ...

  9. FROM USE CASES TO TEST CASES

    FROM USE CASES TO TEST CASES -Test note of “Essential Software Test Design” 2015-08-31 Content: 12.1 ...

  10. 【iCore4 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入

    实验现象: 按键每按下一次,三色LED切换一次状态. 核心源代码: module key_ctrl( input clk_25m, input rst_n, input key, output fpg ...