我想使用Phonegap插入更新并删除SQLite中表的数据,我知道这样做的方法,但问题是每当我尝试两次插入相同的记录时,它会给我错误,哪个是完美的,但当我每次删除同一行时,每次进入成功函数为什么呢?更新功能的情况也是如此,我不知道为什么会发生这种情况,我在代码中做了什么愚蠢的错误?请帮我 更新功能
db.transaction(function(tx){
var abc= "UPDATE table_name SET a= ? WHERE id = ?";
tx.executeSql(abc, [a, id],function SuccessUpdate(tx,result){
alert("success");
alert("Last inserted ID = " + result.insertId);
},
function errorUpdate(error){
alert("Error processing SQL : "+error.code);
});
});
删除功能
db.transaction(function(tx){
var abc= "DELETE FROM table_name WHERE id=?";
tx.executeSql(abc, [id], function(){
alert("success");
});
}, function errorCB(err){
alert("error");
console.warn("Error processing SQL: "+err.code);
}, function (){
alert("success");
});
这个问题可能听起来很傻但我不知道为什么会发生这种情况,我搜索了这个但是找不到任何有用的东西
答案 0 :(得分:1)
这是因为如果列存在且只找不到行,DELETE不会返回错误。
您可以在Android SQLiteDatabase上执行此操作:
int result = myDB.delete("table_name", "WHERE name=?", new String[] { "Jack" });
if (result == 0)
Log.e("myDatabase", "Nothing was deleted (row not found)");
此处的变量结果按Android Docs保存受影响的行数。
编辑:
很抱歉,没有注意到这是针对Phonegap的。
但根据this source,您可以尝试:
db.transaction(function(tx){
var abc= "DELETE table_name SET a= ? WHERE id = ?";
tx.executeSql(abc, [a, id],function SuccessUpdate(tx,result){
if (!result.rowsAffected) {
alert("Nothing was deleted");
} else {
alert("Delete successful");
}
},
function errorUpdate(error){
alert("Error processing SQL : "+error.code);
});
});
注意:我没有对此进行测试,因为我对此框架没有经验,抱歉。
答案 1 :(得分:1)
这就是SQL的工作原理。 UPDATE和DELETE语句会影响与WHERE子句匹配的所有行;这可能是一行,或一行或多行。
之后可以使用结果对象的rowsAffected
属性读取数字或受影响的行:
tx.executeSql("UPDATE ...", [...], function SuccessUpdate(tx,result){
if (result.rowsAffected < 1)
...
}