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<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); } | |
![]() | ![]() |