Stivenhui 发表于 2014-12-5 11:35:04

executeSql更新操作返回值得问题

查找API文档时发现:

当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查询语句的返回数据。
实际使用中发现:
(1)SQL语句为查询时,insertID将不被设定.调用将会报错! 这正常吗?
(2)SQL语句为更新操作时,rowAffected返回受到影响的行数,可是调用的结果却是undefined ?
以下是代码!
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title></title>
<script type="text/javascript" src="js/cordova.js"></script>
<script type="text/javascript">
document.addEventListener("deviceready",onDeviceready,false);

        // PhoneGap加载完毕
        function onDeviceready() {
                var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
                //db.changeVersion("1.0", "2.0");
                //执行一项事务
                db.transaction(populateDB, errorCB, successCB);
        }
       
        // 填充数据库的事务
        function populateDB(tx) {
                tx.executeSql('DROP TABLE IF EXISTS DEMO');
                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(" SQL Error: "+err);
        }
       
        // 事务执行成功后调用的回调函数
        function successCB() {
                alert("Create Success!");
                //打开数据库
                var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
                //进行查询
                db.transaction(searchData, SearchErr);
        }
        //查询的SQL语句
        function searchData(tx){
                tx.executeSql('SELECT * FROM DEMO',[],viewData,viewErr);
        }
       
        //展示数据
        function viewData(tx,results){
                alert("Display data!");
                //insertId
                //alert(results.insertId);
                //rowAffected
                alert(results.rowAffected);
                //rows
                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);
                }
               
        }
       
        //展示数据时出错
        function viewErr(Err){
                alert("Display data reeor"+Err.code);
        }
       
        //查询时出错
        function SearchErr(Err){
                alert("Select Err"+Err.code);
        }
        //更新数据
        function update(){
                alert("Update Data!");
                //打开数据库
                var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
                //添加事务进行更改
                db.transaction(UpdateData, SearchErr);
        }
        //
        function UpdateData(tx){
                //更新操作的事务
                tx.executeSql('UPDATE DEMO SET data ="LIUJIANHUI" WHERE id = 1 ',[],UpdateRes,viewErr);
        }
        //更新结果
        function UpdateRes(tx,results){
       
                alert(tx);
                alert(results);
                //
                alert(results.rowAffected);
        }
       

</script>
</head>
<body>
<div>
<div><span>Name:</span><input type="text" id="name"></div>
<button id="updte" onclick="update();">Update</button>
<button id="select"onclick="successCB();">Select</button>
</div>
</body>
</html>

Stivenhui 发表于 2015-2-9 13:07:22

属性:•insertId:SQLResultSet对象通过SQL语句插入到数据库的行记录的行ID。[译注:如果插入多行的时候,返回最后一个行的ID]
•rowsAffected:被SQL语句改变的记录行数,如果语句没有影响任何行则设置为0。
•rows:是一个SQLResultSetRowList对象,表示返回的多条记录。如果没有返回任何记录,则此对象为空。
api文档中有错误

63778588@qq.com 发表于 2015-5-7 15:52:05

很不错,不错,学习学习。跨平台得顶起

weiboy18 发表于 2015-5-7 16:19:30

好东西啊,感谢phonegap中文网
页: [1]
查看完整版本: executeSql更新操作返回值得问题