使用Phonegap,如果整个数据库事务或单个SQL语句错误,您可以设置要回调的函数。 我想知道如何获取有关错误的更多信息。
我有一个通用的错误处理函数,以及可能触发它的许多不同的SELECT或INSERT。 如何判断哪一个出错?错误信息并不总是很明显。
到目前为止我的代码是......
function get_rows(tx) {
tx.executeSql("SELECT * FROM Blah", [], lovely_success, statement_error);
}
function add_row(tx) {
tx.executeSql("INSERT INTO Blah (1, 2, 3)", [], carry_on, statement_error);
}
function statement_error(tx, error) {
alert(error.code + ' / ' + error.message);
}
从各种示例中,我看到错误回调将传递transaction
对象和error
对象。我读到.code
可以包含以下值:
错误对象是否有其他属性/方法?
此时事务对象的属性/方法是什么?
我似乎无法找到一个很好的在线参考。当然不在Phonegap网站上!
答案 0 :(得分:11)
http://docs.phonegap.com/en/2.2.0/cordova_storage_storage.md.html#SQLError
操作数据库时发生错误时抛出SQLError对象。
此对象有两个属性:
因此,在您的代码error.message
中,您可以很好地描述哪个事务出错了。
我认为这正是你想要的,不是吗?
最好的问候,F481
答案 1 :(得分:3)
对于事务对象,唯一可以做的就是调用它的.executeSql()
方法,据我所知。我找不到这个对象的任何属性。
错误对象具有.code
属性,其中包含一个数字。您可以检查数值(参见我上面的原始问题)或使用类似的东西:
if (error.code == error.DATABASE_ERR) alert('nasty database error')
.message
属性是一个字符串,可能会返回如下内容:
其他信息是可能的!这是我在Chrome中调试时发现的少数几个。我在Phonegap中注意到消息更简洁:“没有这样的表:MyyTable ”
另请注意,对.transaction()
的初始调用还有另一个数据库错误回调。您的函数只会返回一个错误对象(没有事务对象)。
错误.code
将为零,.message
将为“语句回调引发异常或语句错误回调未返回false ”。
所以请记住让你的语句回调(.executeSql
中提到的函数,比如我原始问题的代码示例中的我的statement_error)返回true或false,具体取决于你是否想要你的事务错误回调(内部提到的第二个函数) .transaction
)被击中。如果返回true(或不返回任何内容),将运行您指定的“成功”回调(.transaction
内的第三个)回调。