PhoneGap API介紹:Storage
方法:
參數(shù):
對(duì)象:
- 返回一個(gè)新的Database對(duì)象。
- var dbShell = window.openDatabase(name, version, display_name, size);
說(shuō)明:
- window.openDatabase返回一個(gè)新的Database對(duì)象。
- 該方法將創(chuàng)建一個(gè)新的SQL Lite數(shù)據(jù)庫(kù),并返回該Database對(duì)象??墒褂迷揇atabase對(duì)象操作數(shù)據(jù)。
支持的平臺(tái):
- Android
- BlackBerry WebWorks (OS 6.0或更高版本)
- iPhone
簡(jiǎn)單的范例:
- 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>
name
數(shù)據(jù)庫(kù)的名稱。
version
- 數(shù)據(jù)庫(kù)的版本號(hào)。
- 數(shù)據(jù)庫(kù)的顯示名。
- 以字節(jié)為單位的數(shù)據(jù)庫(kù)大小。
- 包含允許用戶操作數(shù)據(jù)庫(kù)的方法。
方法:
- transaction:運(yùn)行一個(gè)數(shù)據(jù)庫(kù)事務(wù)。
- changeVersion:該方法允許腳本執(zhí)行以下原子操作:校驗(yàn)數(shù)據(jù)庫(kù)的版本號(hào)并更新版本號(hào)以完成架構(gòu)更新。
詳述:
- 調(diào)用window.openDatabase()將返回一個(gè)Database對(duì)象。
支持的平臺(tái):
- Android
- BlackBerry WebWorks (OS 6.0或更高版本)
- iPhone
Transaction 的簡(jiǎn)單范例:
- 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的簡(jiǎn)單范例:
- 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ù)庫(kù)
- 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è)備不支持此方法。
- 包含允許用戶對(duì)Database對(duì)象執(zhí)行SQL語(yǔ)句的方法。
方法:
- executeSql:執(zhí)行一條SQL語(yǔ)句。
詳述:
- 當(dāng)你調(diào)用Database對(duì)象的transaction方法后,其回調(diào)函數(shù)將被調(diào)用并接收一個(gè)SQLTransaction對(duì)象。用戶可以通過(guò)多次調(diào)用executeSql來(lái)建立一個(gè)數(shù)據(jù)庫(kù)事務(wù)處理。
支持的平臺(tái):
- Android
- BlackBerry WebWorks (OS 6.0或更高版本)
- iPhone
Execute SQL的簡(jiǎn)單范例:
- 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ù)庫(kù)
- 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對(duì)象的executeSql方法被調(diào)用,將會(huì)觸發(fā)executeSql中設(shè)定的回調(diào)函數(shù)并返回一個(gè)SQLResultSet對(duì)象。
屬性:
- insertId:SQLResultSet對(duì)象通過(guò)SQL語(yǔ)句插入到數(shù)據(jù)庫(kù)的行記錄的行ID。[譯注:如果插入多行的時(shí)候,返回***一個(gè)行的ID]
- rowAffected:被SQL語(yǔ)句改變的記錄行數(shù),如果語(yǔ)句沒(méi)有影響任何行則設(shè)置為0。
- rows:是一個(gè)SQLResultSetRowList對(duì)象,表示返回的多條記錄。如果沒(méi)有返回任何記錄,則此對(duì)象為空。
詳述:
- 當(dāng)你調(diào)用SQLTransaction對(duì)象的executeSql方法,將會(huì)觸發(fā)executeSql中設(shè)定的回調(diào)函數(shù)并返回一個(gè)SQLResultSet對(duì)象。該結(jié)果對(duì)象包含三個(gè)屬性:***個(gè)是insertID返回成功的SQL插入語(yǔ)句所插入行的ID,如果SQL語(yǔ)句不是插入語(yǔ)句則insertID將不被設(shè)定;第二個(gè)是rowAffected,在SQL查詢操作時(shí)此屬性總是0,當(dāng)插入或更新操作時(shí)此屬性返回受到影響的行數(shù);***一個(gè)屬性是SQLResultSetList類型,返回SQL查詢語(yǔ)句的返回?cái)?shù)據(jù)。
支持的平臺(tái):
- Android
- BlackBerry WebWorks (OS 6.0或更高版本)
- iPhone
Execute SQL的簡(jiǎn)單范例:
- function queryDB(tx) {
- tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
- }
- function querySuccess(tx, results) {
- // 因?yàn)闆](méi)有插入記錄,所以返回值為空
- console.log("Insert ID = " + results.insertId);
- // 因?yàn)檫@是一條查詢語(yǔ)句所以返回值為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ù)庫(kù)
- 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ù)庫(kù)
- function queryDB(tx) {
- tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
- }
- // 查詢成功后調(diào)用的回調(diào)函數(shù)
- function querySuccess(tx, results) {
- // 因?yàn)闆](méi)有插入記錄,所以返回值為空
- console.log("Insert ID = " + results.insertId);
- // 因?yàn)檫@是一條查詢語(yǔ)句所以返回值為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對(duì)象的一個(gè)屬性,包含SQL查詢所返回的所有行數(shù)據(jù)。
屬性:
- length: SQL查詢所返回的記錄行數(shù)。
方法:
- item:根據(jù)指定索引返回一個(gè)行記錄的JavaScript對(duì)象。
詳述:
- SQlResultSetList包含一個(gè)SQL查詢語(yǔ)句所返回的數(shù)據(jù)。該對(duì)象包含一個(gè)長(zhǎng)度屬性告知用戶有多少符合查詢條件的行記錄數(shù)被返回。通過(guò)傳遞指定的索引給該對(duì)象的item方法獲取指定的行記錄數(shù)據(jù),此item方法返回一個(gè)JavaScript對(duì)象,其屬性包含前述查詢語(yǔ)句所針對(duì)的數(shù)據(jù)庫(kù)的所有列。
支持的平臺(tái):
- Android
- BlackBerry WebWorks (OS BlackBerry WebWorks (OS 6.0或更高版本)
- iPhone
Execute SQL的簡(jiǎn)單范例:
- 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ù)庫(kù)
- 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ù)庫(kù)
- 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對(duì)象。
屬性:
- code: 一個(gè)在下面常量列表中定義好的錯(cuò)誤代碼c。
- message:關(guān)于此錯(cuò)誤的說(shuō)明。
常量:
- SQLError.UNKNOWN_ERR:未知錯(cuò)誤
- SQLError.DATABASE_ERR:數(shù)據(jù)庫(kù)錯(cuò)誤
- SQLError.VERSION_ERR:版本錯(cuò)誤
- SQLError.TOO_LARGE_ERR:數(shù)據(jù)集過(guò)大錯(cuò)誤
- SQLError.QUOTA_ERR:超過(guò)數(shù)據(jù)庫(kù)配額錯(cuò)誤
- SQLError.SYNTAX_ERR:語(yǔ)法錯(cuò)誤
- SQLError.CONSTRAINT_ERR:約束錯(cuò)誤
- SQLError.TIMEOUT_ERR:超時(shí)錯(cuò)誤
說(shuō)明:
- 操作數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤時(shí),將拋出一個(gè)SQLError對(duì)象。
- 提供對(duì)W3C Storage接口(http://dev.w3.org/html5/webstorage/#the-localstorage-attribute)的訪問(wèn)。
- var storage = window.localStorage;
方法:
- key:返回指定位置的鍵的名稱。
- getItem: 返回指定鍵所對(duì)應(yīng)的記錄。
- setItem:存儲(chǔ)一個(gè)鍵值對(duì)。
- removeItem:刪除指定鍵對(duì)應(yīng)的記錄。
- clear:刪除所有的鍵值對(duì)。
詳述:
- localStorage提供對(duì)W3C Storage接口的訪問(wèn),可以使用鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù)。
支持的平臺(tái):
- Android
- BlackBerry WebWorks(OS 6.0或更高版本)
- iPhone
Key 的簡(jiǎn)單范例:
- var keyName = window.localStorage.key(0);
Set Item的簡(jiǎn)單范例:
- window.localStorage.setItem("key", "value");
Get Item的簡(jiǎn)單范例:
- var value = window.localStorage.getItem("key");
- // value的值現(xiàn)在是"value"
Remove Item的簡(jiǎn)單范例:
- window.localStorage.removeItem("key");
Clear的簡(jiǎn)單范例:
- 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>