|
phonegap transaction 执行sql语句实现增删改查
方法:
transaction:运行一个数据库事务。
changeVersion:该方法允许脚本执行以下原子操作:校验数据库的版本号并更新版本号以完成架构更新。
详述:
调用window.openDatabase()将返回一个Database对象。
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);
- }
-
- // 填充数据库
- 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设备不支持此方法。
SQLTransaction
包含允许用户对Database对象执行SQL语句的方法。
executeSql:执行一条SQL语句。
详述:
当你调用Database对象的transaction方法后,其回调函数将被调用并接收一个SQLTransaction对象。用户可以通过多次调用executeSql来建立一个数据库事务处理。
SQLResultSet
当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查询语句的返回数据。
Execute SQL的简单范例:
- function queryDB(tx) {
- tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
- }
- function querySuccess(tx, results) {
- // 因为没有插入记录,所以返回值为空
- console.log("Insert ID = " + results.insertId);
- // 因为这是一条查询语句所以返回值为0
- 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">
- // 等待加载PhoneGap
- 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);
- // 因为这是一条查询语句所以返回值为0
- 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);
- }
-
- // 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>
复制代码 SQLResultSetList
SQLResultSet对象的一个属性,包含SQL查询所返回的所有行数据。
属性:
length: SQL查询所返回的记录行数。
方法:
item:根据指定索引返回一个行记录的JavaScript对象。
详述:
SQlResultSetList包含一个SQL查询语句所返回的数据。该对象包含一个长度属性告知用户有多少符合查询条件的行记录数被返回。通过传递指定的索引给该对象的item方法获取指定的行记录数据,此item方法返回一个JavaScript对象,其属性包含前述查询语句所针对的数据库的所有列。
支持的平台:
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);
-
- // 填充数据库
- 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);
- }
-
- // 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>
复制代码 SQLError
出现错误时,将抛出一个SQLError对象。
属性:
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对象。
|
|