在Phonegap for SQLite中插入,更新和删除问题

时间:2014-07-16 13:11:09

标签: java sqlite cordova

我想使用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");
    });

这个问题可能听起来很傻但我不知道为什么会发生这种情况,我搜索了这个但是找不到任何有用的东西

2 个答案:

答案 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)
        ...
}