你好,歡迎來到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