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对象
localStorage本地存储对象
该对象和手机设备上的存储没有关系,而是和html5中的本地存储提供的一个接口
一个完整的例子
html部分
function pgapStorage(){//创建或者打开数据库,大小100000 bytesvar 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两个对象传递给函数 successQueryMyTabfunction 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);}