`

phonegap 数据库详解

阅读更多

今天就把之前使用phonegap的一些见解和疑惑写出来,以便于自己以后查看,有兴趣的同学也可以那去查看,可以做一些参考,本人也是刚学习,所以其中有引起分歧的部分,可以直接的进行斧正,也可邮箱我:zygmain@gmail.com(or:935517644QQ)

1,openDatabase

phonegap官方文档中已经很清楚的标明,如果使用一个数据库首先要用window对象进行创建:

var dbShell = window.openDatabase(name, version, display_name, size);

参数:

 

  • name:标明数据库的名称
  • version:版本号
  • display_name:显示名称,与name的区别在于数据库表中,分别有这两个字段。
  • size:数据库的大小

 

 

 详解:

之前,在利用工厂模式,创建了一个数据库对象:

function db(name,ver,dis,size){

.......

var _db = window.openDatabase(name,ver,dis,size);

_db.transaction();

}

调用function方法进行创建db对象时,new db(),里面传入的参数可以是需要的四个参数,但是,我用下面这个方法的时候就遇到了一个问题,先看方法:

var newdb = {

_db:'',

db:function(){

if(!newdb._db){

newdb._db  = window.openDatabase("database","1.0","mydatabase",10000);

return new db(newdb._db);

}

}

}

疑惑:在进行调用工厂类创建数据库的时候,传入的参数竟然可以不是给定的四个参数,而是直接的传入了一个数据库对象;并且当获取到从工厂类中生成的数据库对象,其中也存在一个_db,两个数据库,究竟在执行transaction事务的时候调用的是哪一个?

 

 

上面说了这么多,都是为了铺陈:

其中的过程是这样的:

//首先程序会为当前应用在data文件夹下创建一个以当前应用包名的文件夹

//当运行window.openDatabase方法后,会在该文件夹下创建一个app_database文件夹;里面创建一个Database.db数据库文件,会在这个数据库文件中创建两个表:Database和Origins;Database存放在创建数据库时,填写的参数信息,Origins中存放数据库文件夹路径

 

 

图1:Database数据库中的两个表



 

 

 

图2:Databases表


 

 

 Databases表中创建的数据库文件夹路径(origin字段)和文件路径(path字段),默认第一次创建是在file__0/ 0000000000000001.db.这个才是我们真正创建的数据库文件。你调用数据库对象进行数据库操作都是在这个数据库下进行的。

 

当我们指定的数据库不存在时会帮我们新建一个数据库,当存在了只会返回一个已有的数据库对象。

2,SQLTransaction对象

该对象是用来操作executesql方法;

执行transaction方法,在接受一个SQLTransaction对象的同时,它还会执行其中的回调函数:

db.transaction(populateDB, errorCB, successCB);

 

 

当你调用Database对象的transaction方法后,其回调函数将被调用并接收一个SQLTransaction对象。用户可以通过SQLTransaction对象多次调用executeSql来建立一个数据库事务处理。

 

function populateDB(tx) {
	tx.executeSql('DROP TABLE DEMO IF EXISTS');
	tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
	tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
	tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}

function errorCB(err) {
   	alert("Error processing SQL: "+err);
}

function successCB() {
   	alert("success!");
}

var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(populateDB, errorCB, successCB);

 

3,SQLResultSet对象

 

执行executesql方法,返回对象:SQLResultSet,对象中的属性

  • insertId:SQLResultSet对象通过SQL语句插入到数据库的行记录的行ID。[译注:如果插入多行的时候,返回最后一个行的ID]
  • rowAffected:被SQL语句改变的记录行数,如果语句没有影响任何行则设置为0。
  • rows:是一个SQLResultSetRowList对象,表示返回的多条记录。如果没有返回任何记录,则此对象为空。


SQLResultSet对象可以在执行executesql的成功回调函数中获取到:

 

参考文档中的例子:tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);

第一个参数为要执行的数据库语句。与普通操纵数据库语句没太大区别。

第二个参数为一个数组对象,存放sql语句中需要的参数的数组,就是sql语句里面出现的?所需要的参数。

第三个参数为执行成功后,调用的方法,在这个函数中可以获取到结果集results.是一个sqlresultset对象

第四个参数为执行错误时候调用的方法。

接下来我们看一下querySuccess这个回调方法。

function querySuccess(tx, results) {

       // 因为没有插入记录,所以返回值为空

       console.log("Insert ID = " + results.insertId);

       // 因为这是一条查询语句所以返回值为0

       console.log("Rows Affected = " + results.rowAffected);

       // 返回查询到的记录行数量

       console.log("Insert ID = " + results.rows.length);

}

 

4,SQLResultSetList对象

 

包含SQL查询所返回的所有行数据。

属性:

  • length: SQL查询所返回的记录行数。

方法:

  • item:根据指定索引返回一个行记录的JavaScript对象。

总结:

 

db.transaction(SQLTransaction,err,sucss);

 

SQLResultSet = SQLTransaction.executesql("select * from",[],succ,err);

 

SQLResultSetList = SQLResultSet.rows;

 

item = SQLResultSetList.item(i);

 

 

 

  • 大小: 1.4 KB
  • 大小: 2 KB
分享到:
评论

相关推荐

    phonegap学习资料

    ### PhoneGap 学习资料详解 #### 一、PhoneGap 概述 **PhoneGap** 是一个移动开发框架,允许开发者使用 **HTML**、**JavaScript** 和 **CSS** 开发跨平台的移动应用程序。该技术最早由 **Nitobi Software** 公司在...

    Beginning PhoneGap

    ### PhoneGap基础知识与应用开发详解 #### 一、引言 《Beginning PhoneGap》是一本由Thomas Myer编写的书籍,旨在为初学者提供全面的PhoneGap开发指南。该书由John Wiley & Sons, Inc.出版,版权日期为2012年。...

    EatingOutside:餐厅的Phonegap应用程序

    《EatingOutside:基于PhoneGap的餐厅应用开发详解》 在现代移动互联网时代,餐厅为了提升顾客体验,往往会开发自己的应用程序。"EatingOutside"就是这样一款专为餐厅打造的PhoneGap应用程序,它允许用户在外就餐时...

    ahmad-phonegap-test2:电话间隙测试

    2. **Contact API**:PhoneGap的联系人API是其核心功能之一,它提供了访问和操作设备联系人数据库的能力。开发者可以创建、读取、更新和删除联系人,还可以搜索特定的联系人信息。 3. **JavaScript**:作为PhoneGap...

    Aratel-Notes:这是一个带有 phoneGap 的示例项目,它看起来像一个简单的笔记本,它实现了一些基本的 phoneGap 功能,如 web sql 存储、jquery 移动集成等

    **Aratel-Notes 项目详解** `Aratel-Notes` 是一个基于 PhoneGap 开发的示例应用程序,它提供了一个类似笔记本的用户界面,展示了 PhoneGap 的核心功能和特性。PhoneGap 是一个开源框架,允许开发者使用 HTML5、CSS...

    mobile_diary:Phonegap和Framework 7移动日记示例

    《构建PhoneGap与Framework 7结合的移动日记应用详解》 在移动应用开发领域,PhoneGap和Framework 7是两种非常流行的工具。PhoneGap是一种基于HTML、CSS和JavaScript的跨平台移动应用框架,允许开发者使用熟悉的Web...

    中科院计算所Android开发技术培训大纲.doc

    - Intent详解:如何启动Activity,获取返回值,以及使用Intent过滤器。 - 播送消息:理解Android中的BroadcastReceiver及其在组件间通信中的应用。 6. **后台服务(Service)** - Service基础:学习Service的...

    empty_jqm_struct:用于开始 jquery 移动项目的空代码

    **jQuery Mobile 空结构(empty_jqm_struct)详解** jQuery Mobile 是一个强大的前端框架,专为移动设备设计,提供了一套完整的用户界面组件和交互效果。它利用 HTML5、CSS3 和 JavaScript 来创建响应式和触控友好...

    Todo:phonegapcordova 中的待办事项列表 ibuild

    4. **Cordova插件**:为了访问设备的特定功能,如本地存储(SQLite数据库)、通知(Push Notifications)或网络访问,开发者需要使用Cordova插件。这些插件是JavaScript接口,封装了与设备硬件或操作系统服务的通信...

    佐优家教平台源码家教网站源码可封装成APPthinkphp内核.txt

    - **数据库操作**:内置了丰富的数据库操作类,支持多种数据库驱动,方便进行数据查询和处理。 #### 2.2 封装成APP的技术实现 - **Hybrid App开发**:利用HTML5、CSS3和JavaScript等前端技术开发Web应用,并通过...

    GASMRent:潜水协会租赁物品手势的移动应用程序

    《GASMRent:潜水协会租赁物品手势移动应用详解》 GASMRent是一款专为潜水协会设计的移动应用程序,其核心功能在于便捷地管理潜水设备的租赁事务,利用先进的技术手段提供高效的服务。该应用借助PhoneGap框架,实现...

    二开苹果cms视频网站源码模板_可封装双端app等.txt

    苹果CMS支持多种数据库系统,如MySQL等,并且具有高度的自定义能力和扩展性,非常适合进行二次开发。 #### 二、二开苹果CMS视频网站源码模板 ##### 2.1 源码模板简介 “二开”即二次开发的意思,指在原有软件的...

    使用Ionic2制作移动应用

    - **Cordova插件**:如`cordova-plugin-sqlite2`用于支持SQLite数据库。 ##### 第十一课:获取数据,Observable和Promise - **HTTP客户端**:Angular提供的HttpClient模块用于发起HTTP请求。 - **处理异步数据**:...

    worldcup-results:移动应用程序显示 wordcup 的结果 2014

    【世界 Cup 结果移动应用程序详解】 “WorldCup-Results”是一个专为展示2014年世界杯比赛结果而设计的移动应用程序。该应用利用了Cordova技术,它实际上是Adobe PhoneGap的基础,允许开发者使用HTML5、CSS3和...

Global site tag (gtag.js) - Google Analytics