http://www.phonegap.cn/
Storage http://www.phonegap.cn/?page_id=402
此API基于W3C WEB SQL Database Specification和W3C Web Storage API Specification。有些设备已经提供了对该规范的实现,对于这些设备采用内置实现而非使用PhoneGap的实现。对于没有存储支持的设备,PhoneGap的实现应该是完全兼容W3C规范。
复制
var dbShell = window .openDatabase ( name , version , display_name , size ) ;
说明:
window.openDatabase返回一个新的Database对象。
该方法将创建一个新的SQL Lite数据库,并返回该Database对象。可使用该Database对象操作数据。
支持的平台:
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" >
document .addEventListener ( " deviceready" , onDeviceReady , false ) ;
function onDeviceReady ( ) {
var db = window .openDatabase ( " test" , " 1.0" , " Test DB" , 1000000 ) ;
}
</ script >
</ head >
< body >
< h1 > Example</ h1 >
< p > Open Database</ p >
</ body >
</ html >
方法:
transaction: 运行一个数据库事务。changeVersion: 该方法允许脚本执行以下原子操作:校验数据库的版本号并更新版本号以完成架构更新。
详述:
调用window.openDatabase()将返回一个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" >
document .addEventListener ( " deviceready" , onDeviceReady , false ) ;
function onDeviceReady ( ) {
var db = window .openDatabase ( " Database" , " 1.0" , " PhoneGap Demo" , 200000 ) ;
db .transaction ( populateDB , errorCB , successCB ) ;
}
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 ( tx , err ) {
alert ( " Error processing SQL: " + err ) ;
}
function successCB ( ) {
alert ( " success!" ) ;
}
</ script >
</ head >
< body >
< h1 > Example</ h1 >
< p > Database</ p >
</ body >
</ html >
Android 1.X 的特异情况:
changeVersion: Android 1.X设备不支持此方法。
包含允许用户对Database对象执行SQL语句的方法。
详述:
当你调用Database对象的transaction方法后,其回调函数将被调用并接收一个SQLTransaction对象。用户可以通过多次调用executeSql来建立一个数据库事务处理。
支持的平台:
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" >
document .addEventListener ( " deviceready" , onDeviceReady , false ) ;
function onDeviceReady ( ) {
var db = window .openDatabase ( " Database" , " 1.0" , " PhoneGap Demo" , 200000 ) ;
db .transaction ( populateDB , errorCB , successCB ) ;
}
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!" ) ;
}
</ script >
</ head >
< body >
< h1 > Example</ h1 >
< p > SQLTransaction</ p >
</ body >
</ html >
当SQLTransaction对象的executeSql方法被调用,将会触发executeSql中设定的回调函数并返回一个SQLResultSet对象。
属性:
insertId: SQLResultSet对象通过SQL语句插入到数据库的行记录的行ID。[译注:如果插入多行的时候,返回最后一个行的ID]rowAffected: 被SQL语句改变的记录行数,如果语句没有影响任何行则设置为0。rows: 是一个SQLResultSetRowList对象,表示返回的多条记录。如果没有返回任何记录,则此对象为空。
详述:
当你调用SQLTransaction对象的executeSql方法,将会触发executeSql中设定的回调函数并返回一个SQLResultSet对象。该结果对象包含三个属性:第一个是insertID返回成功的SQL插入语句所插入行的ID,如果SQL语句不是插入语句则insertID将不被设定;第二个是rowAffected,在SQL查询操作时此属性总是0,当插入或更新操作时此属性返回受到影响的行数;最后一个属性是SQLResultSetList类型,返回SQL查询语句的返回数据。
支持的平台:
Android BlackBerry WebWorks (OS 6.0或更高版本) iPhone
Execute SQL的简单范例:
复制
function queryDB ( tx ) {
tx .executeSql ( ' SELECT * FROM DEMO' , [ ] , querySuccess , errorCB ) ;
}
function querySuccess ( tx , results ) {
console .log ( " Insert ID = " + results .insertId ) ;
console .log ( " Rows Affected = " + results .rowAffected ) ;
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" >
document .addEventListener ( " deviceready" , onDeviceReady , false ) ;
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 queryDB ( tx ) {
tx .executeSql ( ' SELECT * FROM DEMO' , [ ] , querySuccess , errorCB ) ;
}
function querySuccess ( tx , results ) {
console .log ( " Insert ID = " + results .insertId ) ;
console .log ( " Rows Affected = " + results .rowAffected ) ;
console .log ( " Insert ID = " + results .rows .length ) ;
}
function errorCB ( err ) {
console .log ( " Error processing SQL: " + err .code ) ;
}
function successCB ( ) {
var db = window .openDatabase ( " Database" , " 1.0" , " PhoneGap Demo" , 200000 ) ;
db .transaction ( queryDB , errorCB ) ;
}
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对象的一个属性,包含SQL查询所返回的所有行数据。
方法:
item: 根据指定索引返回一个行记录的JavaScript对象。
详述:
SQlResultSetList包含一个SQL查询语句所返回的数据。该对象包含一个长度属性告知用户有多少符合查询条件的行记录数被返回。通过传递指定的索引给该对象的item方法获取指定的行记录数据,此item方法返回一个JavaScript对象,其属性包含前述查询语句所针对的数据库的所有列。
支持的平台:
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" >
document .addEventListener ( " deviceready" , onDeviceReady , false ) ;
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 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 ) {
console .log ( " Error processing SQL: " + err .code ) ;
}
function successCB ( ) {
var db = window .openDatabase ( " Database" , " 1.0" , " PhoneGap Demo" , 200000 ) ;
db .transaction ( queryDB , errorCB ) ;
}
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 >
属性:
code: 一个在下面常量列表中定义好的错误代码c。message: 关于此错误的说明。
常量:
SQLError.UNKNOWN_ERR: 未知错误SQLError.DATABASE_ERR:数据库错误 SQLError.VERSION_ERR: 版本错误SQLError.TOO_LARGE_ERR: 数据集过大错误SQLError.QUOTA_ERR: 超过数据库配额错误SQLError.SYNTAX_ERR: 语法错误SQLError.CONSTRAINT_ERR: 约束错误SQLError.TIMEOUT_ERR: 超时错误
说明:
操作数据库出现错误时,将抛出一个SQLError对象。
提供对W3C Storage接口(http://dev.w3.org/html5/webstorage/#the-localstorage-attribute)的访问。
复制
var storage = window .localStorage ;
方法:
key: 返回指定位置的键的名称。getItem: 返回指定键所对应的记录。setItem: 存储一个键值对。removeItem: 删除指定键对应的记录。clear: 删除所有的键值对。
详述:
localStorage提供对W3C Storage接口的访问,可以使用键值对的方式存储数据。
支持的平台:
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" ) ;
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" >
document .addEventListener ( " deviceready" , onDeviceReady , false ) ;
function onDeviceReady ( ) {
window .localStorage .setItem ( " key" , " value" ) ;
var keyname = window .localStorage .key ( i ) ;
[ 译注: 应当是var keyname = window .localStorage .key ( 0 ) ;]
var value = window .localStorage .getItem ( " key" ) ;
window .localStorage .removeItem ( " key" ) ;
window .localStorage .setItem ( " key2" , " value2" ) ;
window .localStorage .clear ( ) ;
}
</ script >
</ head >
< body >
< h1 > Example</ h1 >
< p > localStorage</ p >
</ body >
</ html >