你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> phonegap 中的存儲

phonegap 中的存儲

編輯:關於IOS

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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved