我正在测试迁移的混合应用程序,从MobileFirst v7到v8。
现在我得到" TypeError"当我尝试执行更新语句时:
var db = openDatabase();
var addr1 = document.getElementById('Addr1').value;
var addr2 = document.getElementById('Addr2').value;
var addr3 = document.getElementById('Addr3').value;
var id = document.getElementById('Id').value;
db.transaction(function (tx) {
sqlupdate= "UPDATE Profile SET Addr1 = '" + addr1 + "', ";
sqlupdate= sqlupdate + " Addr2 = '" + addr2 + "', ";
sqlupdate= sqlupdate + " Addr3 = '" + addr3 + "' ";
sqlupdate= sqlupdate + " where Id ='" + id + "'";
tx.executeSql(sqlupdate,errorOn,successOn);
});
function errorOn()
{
alert("Error");
}
function successOn()
{
alert("Profile Saved");
}
我为SELECT和INSERT运行tx.executeSql()没有问题,只有在UPDATE时才会出现此错误。
任何人都可以指出我的错误? 感谢。
答案 0 :(得分:0)
好的......最后我得到了答案。问题出在这里:
tx.executeSql(sqlupdate,errorOn,successOn);
此函数需要4个参数,需要切换回调的位置:
tx.executeSql(sqlupdate,*[updateParams]*,successOn, errorOn);
因此解决方案是将代码更改为以下内容:
db.transaction(function (tx) {
sqlupdate= "UPDATE Profile SET Addr1 = ?, ";
sqlupdate= sqlupdate + " Addr2 = ?, ";
sqlupdate= sqlupdate + " Addr3 = ? ;
sqlupdate= sqlupdate + " where Id =? ";
tx.executeSql(sqlupdate,[addr1, addr2, addr3, id],successOn, errorOn);
});
对于最小的代码更改,您可以保留sql并只放一个空数组以使其工作:
tx.executeSql(sqlupdate,[],successOn, errorOn);