PhoneGap API介紹:Storage
作者:佚名 
  本文將介紹PhoneGap API——Storage:截獲設(shè)備的本地存儲選項(xiàng)。Storage提供對設(shè)備的存儲選項(xiàng)的訪問。此API基于W3C WEB SQL Database Specification和W3C Web Storage API Specification。有些設(shè)備已經(jīng)提供了對該規(guī)范的實(shí)現(xiàn),對于這些設(shè)備采用內(nèi)置實(shí)現(xiàn)而非使用PhoneGap的實(shí)現(xiàn)。對于沒有存儲支持的設(shè)備,PhoneGap的實(shí)現(xiàn)應(yīng)該是完全兼容W3C規(guī)范。
 方法:
參數(shù):
對象:
- 返回一個(gè)新的Database對象。
 
- var dbShell = window.openDatabase(name, version, display_name, size);
 
說明:
- window.openDatabase返回一個(gè)新的Database對象。
 - 該方法將創(chuàng)建一個(gè)新的SQL Lite數(shù)據(jù)庫,并返回該Database對象??墒褂迷揇atabase對象操作數(shù)據(jù)。
 
支持的平臺:
- Android
 - BlackBerry WebWorks (OS 6.0或更高版本)
 - iPhone
 
簡單的范例:
- var db = window.openDatabase("test", "1.0", "Test DB", 1000000);
 
完整的范例:
- <!DOCTYPE html>
 - <html>
 - <head>
 - <title>Contact Example</title>
 - <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
 - <script type="text/javascript" charset="utf-8">
 - // 等待加載PhoneGap
 - document.addEventListener("deviceready", onDeviceReady, false);
 - // PhoneGap加載完畢
 - function onDeviceReady() {
 - var db = window.openDatabase("test", "1.0", "Test DB", 1000000);
 - }
 - </script>
 - </head>
 - <body>
 - <h1>Example</h1>
 - <p>Open Database</p>
 - </body>
 - </html>
 
- 數(shù)據(jù)庫的版本號。
 
- 數(shù)據(jù)庫的顯示名。
 
- 以字節(jié)為單位的數(shù)據(jù)庫大小。
 
- 包含允許用戶操作數(shù)據(jù)庫的方法。
 
方法:
- transaction:運(yùn)行一個(gè)數(shù)據(jù)庫事務(wù)。
 - changeVersion:該方法允許腳本執(zhí)行以下原子操作:校驗(yàn)數(shù)據(jù)庫的版本號并更新版本號以完成架構(gòu)更新。
 
詳述:
- 調(diào)用window.openDatabase()將返回一個(gè)Database對象。
 
支持的平臺:
- Android
 - BlackBerry WebWorks (OS 6.0或更高版本)
 - iPhone
 
Transaction 的簡單范例:
- function populateDB(tx) {
 - tx.executeSql('DROP TABLE DEMO IF EXISTS');
 - tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
 - }
 - function errorCB(err) {
 - alert("Error processing SQL: "+err.code);
 - }
 - function successCB() {
 - alert("success!");
 - }
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(populateDB, errorCB, successCB);
 - Change Version的簡單范例:
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.changeVersion("1.0", "1.1");
 
完整的范例:
- <!DOCTYPE html>
 - <html>
 - <head>
 - <title>Contact Example</title>
 - <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
 - <script type="text/javascript" charset="utf-8">
 - // 等待加載PhoneGap
 - document.addEventListener("deviceready", onDeviceReady, false);
 - // PhoneGap加載完畢
 - function onDeviceReady() {
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(populateDB, errorCB, successCB);
 - }
 - // 填充數(shù)據(jù)庫
 - function populateDB(tx) {
 - tx.executeSql('DROP TABLE DEMO IF EXISTS');
 - tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
 - }
 - // 事務(wù)執(zhí)行出錯(cuò)后調(diào)用的回調(diào)函數(shù)
 - function errorCB(tx, err) {
 - alert("Error processing SQL: "+err);
 - }
 - // 事務(wù)執(zhí)行成功后調(diào)用的回調(diào)函數(shù)
 - function successCB() {
 - alert("success!");
 - }
 - </script>
 - </head>
 - <body>
 - <h1>Example</h1>
 - <p>Database</p>
 - </body>
 - </html>
 
Android 1.X 的特異情況:
- changeVersion:Android 1.X設(shè)備不支持此方法。
 
- 包含允許用戶對Database對象執(zhí)行SQL語句的方法。
 
方法:
- executeSql:執(zhí)行一條SQL語句。
 
詳述:
- 當(dāng)你調(diào)用Database對象的transaction方法后,其回調(diào)函數(shù)將被調(diào)用并接收一個(gè)SQLTransaction對象。用戶可以通過多次調(diào)用executeSql來建立一個(gè)數(shù)據(jù)庫事務(wù)處理。
 
支持的平臺:
- Android
 - BlackBerry WebWorks (OS 6.0或更高版本)
 - iPhone
 
Execute SQL的簡單范例:
- function populateDB(tx) {
 - tx.executeSql('DROP TABLE DEMO IF EXISTS');
 - tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
 - }
 - function errorCB(err) {
 - alert("Error processing SQL: "+err);
 - }
 - function successCB() {
 - alert("success!");
 - }
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(populateDB, errorCB, successCB);
 
完整的范例:
- <!DOCTYPE html>
 - <html>
 - <head>
 - <title>Contact Example</title>
 - <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
 - <script type="text/javascript" charset="utf-8">
 - // 等待加載PhoneGap
 - document.addEventListener("deviceready", onDeviceReady, false);
 - // PhoneGap加載完畢
 - function onDeviceReady() {
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(populateDB, errorCB, successCB);
 - }
 - // 填充數(shù)據(jù)庫
 - function populateDB(tx) {
 - tx.executeSql('DROP TABLE DEMO IF EXISTS');
 - tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
 - }
 - // 事務(wù)執(zhí)行出錯(cuò)后調(diào)用的回調(diào)函數(shù)
 - function errorCB(err) {
 - alert("Error processing SQL: "+err);
 - }
 - // 事務(wù)執(zhí)行成功后調(diào)用的回調(diào)函數(shù)
 - function successCB() {
 - alert("success!");
 - }
 - </script>
 - </head>
 - <body>
 - <h1>Example</h1>
 - <p>SQLTransaction</p>
 - </body>
 - </html>
 
- 當(dāng)SQLTransaction對象的executeSql方法被調(diào)用,將會觸發(fā)executeSql中設(shè)定的回調(diào)函數(shù)并返回一個(gè)SQLResultSet對象。
 
屬性:
- insertId:SQLResultSet對象通過SQL語句插入到數(shù)據(jù)庫的行記錄的行ID。[譯注:如果插入多行的時(shí)候,返回***一個(gè)行的ID]
 - rowAffected:被SQL語句改變的記錄行數(shù),如果語句沒有影響任何行則設(shè)置為0。
 - rows:是一個(gè)SQLResultSetRowList對象,表示返回的多條記錄。如果沒有返回任何記錄,則此對象為空。
 
詳述:
- 當(dāng)你調(diào)用SQLTransaction對象的executeSql方法,將會觸發(fā)executeSql中設(shè)定的回調(diào)函數(shù)并返回一個(gè)SQLResultSet對象。該結(jié)果對象包含三個(gè)屬性:***個(gè)是insertID返回成功的SQL插入語句所插入行的ID,如果SQL語句不是插入語句則insertID將不被設(shè)定;第二個(gè)是rowAffected,在SQL查詢操作時(shí)此屬性總是0,當(dāng)插入或更新操作時(shí)此屬性返回受到影響的行數(shù);***一個(gè)屬性是SQLResultSetList類型,返回SQL查詢語句的返回?cái)?shù)據(jù)。
 
支持的平臺:
- Android
 - BlackBerry WebWorks (OS 6.0或更高版本)
 - iPhone
 
Execute SQL的簡單范例:
- function queryDB(tx) {
 - tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
 - }
 - function querySuccess(tx, results) {
 - // 因?yàn)闆]有插入記錄,所以返回值為空
 - console.log("Insert ID = " + results.insertId);
 - // 因?yàn)檫@是一條查詢語句所以返回值為0
 - console.log("Rows Affected = " + results.rowAffected);
 - // 返回查詢到的記錄行數(shù)量
 - console.log("Insert ID = " + results.rows.length);
 - }
 - function errorCB(err) {
 - alert("Error processing SQL: "+err.code);
 - }
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(queryDB, errorCB);
 
完整的范例:
- <!DOCTYPE html>
 - <html>
 - <head>
 - <title>Contact Example</title>
 - <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
 - <script type="text/javascript" charset="utf-8">
 - // 等待加載PhoneGap
 - document.addEventListener("deviceready", onDeviceReady, false);
 - // 填充數(shù)據(jù)庫
 - function populateDB(tx) {
 - tx.executeSql('DROP TABLE DEMO IF EXISTS');
 - tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
 - }
 - // 查詢數(shù)據(jù)庫
 - function queryDB(tx) {
 - tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
 - }
 - // 查詢成功后調(diào)用的回調(diào)函數(shù)
 - function querySuccess(tx, results) {
 - // 因?yàn)闆]有插入記錄,所以返回值為空
 - console.log("Insert ID = " + results.insertId);
 - // 因?yàn)檫@是一條查詢語句所以返回值為0
 - console.log("Rows Affected = " + results.rowAffected);
 - // 返回查詢到的記錄行數(shù)量
 - console.log("Insert ID = " + results.rows.length);
 - }
 - // 事務(wù)執(zhí)行出錯(cuò)后調(diào)用的回調(diào)函數(shù)
 - function errorCB(err) {
 - console.log("Error processing SQL: "+err.code);
 - }
 - // 事務(wù)執(zhí)行成功后調(diào)用的回調(diào)函數(shù)
 - function successCB() {
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(queryDB, errorCB);
 - }
 - // PhoneGap加載完畢
 - function onDeviceReady() {
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(populateDB, errorCB, successCB);
 - }
 - </script>
 - </head>
 - <body>
 - <h1>Example</h1>
 - <p>Database</p>
 - </body>
 - </html>
 
- SQLResultSet對象的一個(gè)屬性,包含SQL查詢所返回的所有行數(shù)據(jù)。
 
屬性:
- length: SQL查詢所返回的記錄行數(shù)。
 
方法:
- item:根據(jù)指定索引返回一個(gè)行記錄的JavaScript對象。
 
詳述:
- SQlResultSetList包含一個(gè)SQL查詢語句所返回的數(shù)據(jù)。該對象包含一個(gè)長度屬性告知用戶有多少符合查詢條件的行記錄數(shù)被返回。通過傳遞指定的索引給該對象的item方法獲取指定的行記錄數(shù)據(jù),此item方法返回一個(gè)JavaScript對象,其屬性包含前述查詢語句所針對的數(shù)據(jù)庫的所有列。
 
支持的平臺:
- Android
 - BlackBerry WebWorks (OS BlackBerry WebWorks (OS 6.0或更高版本)
 - iPhone
 
Execute SQL的簡單范例:
- function queryDB(tx) {
 - tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
 - }
 - function querySuccess(tx, results) {
 - var len = results.rows.length;
 - console.log("DEMO 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);
 - }
 - }
 - function errorCB(err) {
 - alert("Error processing SQL: "+err.code);
 - }
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(queryDB, errorCB);
 
完整的范例:
- <!DOCTYPE html>
 - <html>
 - <head>
 - <title>Contact Example</title>
 - <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
 - <script type="text/javascript" charset="utf-8">
 - // 等待加載PhoneGap
 - document.addEventListener("deviceready", onDeviceReady, false);
 - // 填充數(shù)據(jù)庫
 - function populateDB(tx) {
 - tx.executeSql('DROP TABLE DEMO IF EXISTS');
 - tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
 - tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
 - }
 - // 查詢數(shù)據(jù)庫
 - function queryDB(tx) {
 - tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
 - }
 - // 查詢成功后調(diào)用的回調(diào)函數(shù)
 - function querySuccess(tx, results) {
 - var len = results.rows.length;
 - console.log("DEMO 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);
 - }
 - }
 - // 事務(wù)執(zhí)行出錯(cuò)后調(diào)用的回調(diào)函數(shù)
 - function errorCB(err) {
 - console.log("Error processing SQL: "+err.code);
 - }
 - // 事務(wù)執(zhí)行成功后調(diào)用的回調(diào)函數(shù)
 - function successCB() {
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(queryDB, errorCB);
 - }
 - // PhoneGap加載完畢
 - function onDeviceReady() {
 - var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
 - db.transaction(populateDB, errorCB, successCB);
 - }
 - </script>
 - </head>
 - <body>
 - <h1>Example</h1>
 - <p>Database</p>
 - </body>
 - </html>
 
- 出現(xiàn)錯(cuò)誤時(shí),將拋出一個(gè)SQLError對象。
 
屬性:
- code: 一個(gè)在下面常量列表中定義好的錯(cuò)誤代碼c。
 - message:關(guān)于此錯(cuò)誤的說明。
 
常量:
- SQLError.UNKNOWN_ERR:未知錯(cuò)誤
 - SQLError.DATABASE_ERR:數(shù)據(jù)庫錯(cuò)誤
 - SQLError.VERSION_ERR:版本錯(cuò)誤
 - SQLError.TOO_LARGE_ERR:數(shù)據(jù)集過大錯(cuò)誤
 - SQLError.QUOTA_ERR:超過數(shù)據(jù)庫配額錯(cuò)誤
 - SQLError.SYNTAX_ERR:語法錯(cuò)誤
 - SQLError.CONSTRAINT_ERR:約束錯(cuò)誤
 - SQLError.TIMEOUT_ERR:超時(shí)錯(cuò)誤
 
說明:
- 操作數(shù)據(jù)庫出現(xiàn)錯(cuò)誤時(shí),將拋出一個(gè)SQLError對象。
 
- 提供對W3C Storage接口(http://dev.w3.org/html5/webstorage/#the-localstorage-attribute)的訪問。
 
- var storage = window.localStorage;
 
方法:
- key:返回指定位置的鍵的名稱。
 - getItem: 返回指定鍵所對應(yīng)的記錄。
 - setItem:存儲一個(gè)鍵值對。
 - removeItem:刪除指定鍵對應(yīng)的記錄。
 - clear:刪除所有的鍵值對。
 
詳述:
- localStorage提供對W3C Storage接口的訪問,可以使用鍵值對的方式存儲數(shù)據(jù)。
 
支持的平臺:
- Android
 - BlackBerry WebWorks(OS 6.0或更高版本)
 - iPhone
 
Key 的簡單范例:
- var keyName = window.localStorage.key(0);
 
Set Item的簡單范例:
- window.localStorage.setItem("key", "value");
 
Get Item的簡單范例:
- var value = window.localStorage.getItem("key");
 - // value的值現(xiàn)在是"value"
 
Remove Item的簡單范例:
- window.localStorage.removeItem("key");
 
Clear的簡單范例:
- window.localStorage.clear();
 
完整的范例:
- <!DOCTYPE html>
 - <html>
 - <head>
 - <title>Contact Example</title>
 - <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
 - <script type="text/javascript" charset="utf-8">
 - // 等待加載PhoneGap
 - document.addEventListener("deviceready", onDeviceReady, false);
 - // PhoneGap加載完畢
 - function onDeviceReady() {
 - window.localStorage.setItem("key", "value");
 - var keyname = window.localStorage.key(i);
 - [譯注:應(yīng)當(dāng)是var keyname = window.localStorage.key(0);]
 - // keyname的值現(xiàn)在是“key”
 - var value = window.localStorage.getItem("key");
 - // value的值現(xiàn)在是“value”
 - window.localStorage.removeItem("key");
 - window.localStorage.setItem("key2", "value2");
 - window.localStorage.clear();
 - // localStorage現(xiàn)在是空的
 - }
 - </script>
 - </head>
 - <body>
 - <h1>Example</h1>
 - <p>localStorage</p>
 - </body>
 - </html>
 
責(zé)任編輯:佚名 
                    來源:
                    PhoneGap中國
 














 
 
 
 
 
 
 