(转)phonegap 数据库详解

原文:http://firepix.iteye.com/blog/1618343

phonegap
数据库详解
          博客分类:

phonegap

今天就把之前使用phonegap的一些见解和疑惑写出来,以便于自己以后查看,有兴趣的同学也可以那去查看,可以做一些参考,本人也是刚学习,所以其中有引起分歧的部分,可以直接的进行斧正,也可邮箱我:[email protected](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);

(转)phonegap 数据库详解,布布扣,bubuko.com

时间: 2024-10-18 14:05:53

(转)phonegap 数据库详解的相关文章

Oracle 11g数据库详解(2015-1-18更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

Oracle 11g数据库详解(2015-02-28更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

Android开发之SQLite数据库详解

Android开发之SQLite数据库详解 请尊重他人的劳动成果,转载请注明出处:Android开发之SQLite数据库详解 http://blog.csdn.net/fengyuzhengfan/article/details/40194393 Android系统集成了一个轻量级的数据库:SQLite, SQLite并不想成为像Oracle.MySQL那样的专业数据库.SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(如手机.PDA等)适量数据存取. 虽然SQLite支持绝大

Java连接SQLite数据库详解【转】

1 package com.hedalixin; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.ResultSet; 5 import java.sql.Statement; 6 7 /** 8 * @author Chrome 9 * 10 */ 11 public class JavaSqlite { 12 13 /** 14 * @param args 15 */ 16 pu

intelliJ IDEA 配置MySQL数据库 详解

1> 在主界面中,点击右边侧栏的 Database ,在点击 + ,再Data Source 选择数据库 2> 填入 Database 数据库名,在输入 User 和 Password ,点击 Test Connection 3> 这样表示数据库连接成功 4> 这样就会看到数据库连接成功 很多人认为配置 Database 就是为了有一个 GUI 管理数据库功能,但是这并不是 IntelliJ IDEA 的 Database 最重要特性.数据库的 GUI 工具有很多,IntelliJ

JAVA通过JDBC连接Oracle数据库详解【转载】

JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.html Java连接Oracle步骤: 1.注册加载驱动 驱动名:DRIVER="oracle.jdbc.driver.OracleDriver"; Class.forName("驱动类名"); 2.获得连接 数据库地址: URL="jdbc:oracle:thi

Android基础之十四数据存储 之 SQLite数据库详解

Android基础之十四数据存储 之 SQLite数据库详解 SQLite 是一款 轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用. SQLite 不仅支持标准的 SQL 语法,还遵循了数据库的 ACID( 原子性(Atomicity) .一致性(Consistency) . 隔离性(Isolation) . 持久性(Durability))事务,所以只要你以前使用过其他的关系型数据库,就可以很快地上手 SQLite.而

android通讯录数据库详解

查看手机的手机库导出这个文件其实用到的表也就四张, 注: 1.contacts 表 _id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据.display_name: 联系人名称photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空times_contacted:通话记录的次数last_time_contacted: 最后的通话时间 lookup :是一个持久化的储存 因为用户可能会改名子 但是它改不了lookup 2.data表 raw_contac

Cassandra 分布式数据库详解,第 2 部分:数据结构与数据读写

Cassandra 的数据存储结构 Cassandra 中的数据主要分为三种: CommitLog:主要记录下客户端提交过来的数据以及操作.这个数据将被持久化到磁盘中,以便数据没有被持久化到磁盘时可以用来恢复. Memtable:用户写的数据在内存中的形式,它的对象结构在后面详细介绍.其实还有另外一种形式是 BinaryMemtable 这个格式目前 Cassandra 并没有使用,这里不再介绍了. SSTable:数据被持久化到磁盘,这又分为 Data.Index 和 Filter 三种数据格