android平台phonegap 中的存储

 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
console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data = " + results.rows.item(i).data);

}
}

 

localStorage本地存储对象

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

一个完整的例子

html部分

1、<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2、"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3、<html xmlns="http://www.w3.org/1999/xhtml">
4、1<head>
5、<title> new document </title>
6、</head>
7、<body>
8、<button οnclick="pgapStorage()">pgapStorage</button>
9、</body>
10、<script type="text/javascript" src="cordova-2.1.0.js"></script>
11、<script type="text/javascript" src="pgapstorage.js"></script>
12、</html>

js部分

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); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值