灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2964回复:0

phonegap 中的存储

楼主#
更多 发布于:2012-10-30 10:36

phonegap 中与存储相关的对象有

Database 数据库对象

SQLTransaction   事物对象

SQLResultSet Sql结果对象

SQLResultSetList 查询返回数据集对象

SQLError Sql错误对象

localStorage 本地存储对象

Database 数据库对象:

通过openDatabase方法获得该对象

例如:

window.openDatabase(database_name, database_version, database_displayname, database_size);

var dbOne = window.openDatabase("test1", "1.0", "Test DB", 1000000);

database_name:数据库名字,

database_version:数据库版本

database_displayname:显示名字

database_size:数据库大小

创建完成后便会在/data/data/包名/app_database/dbOne.db找到刚才创建的数据库文件,可以利用DDMS查看

SQLTransaction   事物对象

phonegap没有提供直接获取事物对象的方法,而是利用Database 对象transaction方法,将事物对象传递给一个回调

函数,例如

dbOne.transaction(createATable, errorCreateTable, successCreateTable);

createATable即是一个回调函数,会将事物对象以参数的形式传进去,createATable函数

createATable(trans){

}

这里的trans即是传递进的事物对象,有了事物对象就可利用事物对象的executeSql方法执行sql语句

例如

createATable(trans){

trans.executeSql('CREATE TABLE IF NOT EXISTS MyTab (id unique, data)');

tx.executeSql('INSERT INTO MyTab (id, data) VALUES (1, "First row")');

tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');

}

这样就利用数据库的事物对象创建了MyTab表并且插入了两条数据

SQLError 错误对象

SQLError对象也是以参数的形式传递给一个回调函数

在上面的方法

dbOne.transaction(createATable, errorCreateTable, successCreateTable);

errorCreateTable就是一个回调函数,如果dbOne.transaction函数执行失败,就会调用回调函数errorCreateTable

同时将SQLError对象传递进去

例如

function errorCreateTable(err)

{

alert("err code:"+err.code+"err message:"+err.message');

}

code和message为SQLError对象的两个属性

SQLResultSet对象

该对象是由事物对象的executeSql方法传递给回调函数,在回调函数中在对结构集对象操作,例如

 tx.executeSql('SELECT * FROM MyTab', [], querySuccess, errorCB);

querySuccess即是成功执行后的回调函数,

function querySuccess(trans, results) {

alert("Returned rows = " + results.rows.length);

if (!resultSet.rowsAffected) {

  alert('No rows affected!');

  return false;

}

该函数接受两个参数:事物对象和结果集对象SQLResultSet,SQLResultSet包含三个属性

insertId 函数插入数据行的row ID

rowsAffected  改变的数据行的数量

rows:rows是一个SQLResultSetList 对象,该对象代表执行查询sql时返回的所有数据行

SQLResultSetList 查询返回的结果集对象

该对象包含一个属性 length(返回的数据行数量),一个方法item(该方法返回某个特定的数据行0

 function querySuccess(trans, results) {

        var len = results.rows.length;

        console.log("MyTab table: " + len + " rows found.");

        for (var i=0; i<len; i++){

            console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data =  " + results.rows.item(i).data);

        }

    }

localStorage本地存储对象

该对象和手机设备上的存储没有关系,而是和html5中的本地存储提供的一个接口

一个完整的例子

html部分

[html]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

 <head>

  <title> new document </title>  

 </head>

 <body>

  <button onclick="pgapStorage()">pgapStorage</button>

 </body>

<script type="text/javascript" src="cordova-2.1.0.js"></script>

  <script type="text/javascript" src="pgapstorage.js"></script>

</html>

js部分

[html]

function pgapStorage(){

    //创建或者打开数据库,大小100000 bytes

    var dbOne = window.openDatabase("myDataBase","1.0","phonegapdatabase",100000);

    

    //将事物对象SQLTransaction传给createATable函数,如果发生错误将SQLError对象传给errorCreateTable函数

    dbOne.transaction(createATable, errorCreateTableTrans, successCreateTableTrans);

}

//执行回调函数createATable,创建表MyTab并且插入数据

function createATable(trans){

     trans.executeSql('DROP TABLE IF EXISTS MyTab');

     trans.executeSql('CREATE TABLE IF NOT EXISTS MyTab (id unique, data)');

     trans.executeSql('INSERT INTO MyTab (id, data) VALUES (1, "First row")');

     trans.executeSql('INSERT INTO MyTab (id, data) VALUES (2, "Second row")');

}

//dbOne.transaction()执行失败后执行,并传递SQLError对象

function errorCreateTableTrans(err){

    alert("err code:"+err.code+"err message:"+err.message);

}

 

//dbOne.transaction()执行成功后会执行

function successCreateTableTrans(){

    alert("successfully");  

    var dbOne = window.openDatabase("myDataBase","1.0","phonegapdatabase",100000);

    //创建新的事物对象,并传递给回调函数

    dbOne.transaction(queryMyTab,successQueryMyTabTrans,errorQueryMyTabTrans);

}

 

function successQueryMyTabTrans(){

    alert("successQueryMyTabTrans");

}

function errorQueryMyTabTrans(){

    alert("err code:"+err.code+"err message:"+err.message);

}

//查询

function queryMyTab(trans){

    //查询成功后执行successQueryMyTab回调函数,失败执行errorQueryMyTab函数

    trans.executeSql('SELECT * FROM MyTab', [], successQueryMyTab, errorQueryMyTab);

}

//executeSql执行成功后执行,并将SQLTransaction、SQLResultSet两个对象传递给函数  successQueryMyTab

function successQueryMyTab(trans,results){

    var len = results.rows.length;

    alert(len);

    //利用弹出框显示查询的结果

    for (var i=0; i<len; i++){

            alert("Row = " + i + " ID = " + results.rows.item(i).id + " Data =  " + results.rows.item(i).data);

        }    

}

//executeSql()执行失败后执行

function errorQueryMyTab(err){

    alert("err code:"+err.code+"err message:"+err.message);

}


喜欢0 评分0
游客

返回顶部