|
本人前段时间试验了phonegap的数据库操作.试验过程中遇到了一些问题!
以下是代码!
<!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>
官方相关的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查询语句的返回数据。
那么问题来了!我的手机是android2.3.6版本的三星机器,
(1)SQL语句为查询时,insertID将不被设定.调用将会报错! 这正常吗?
(2)SQL语句为更新操作时,rowAffected返回受到影响的行数,可是调用的结果却是undefined ?
求大神为我指点迷津,受到影响的行数的返回值是什么? |
|