Mag*_*ith 8 database error-handling cordova
使用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);
}
Run Code Online (Sandbox Code Playgroud)
从各种示例中我看到错误回调将传递一个transaction
对象和一个error
对象.我读过它.code
可以有以下值:
是否有错误对象的任何其他属性/方法?
此时事务对象的属性/方法是什么?
我似乎无法找到一个很好的在线参考.当然不在Phonegap网站上!
F48*_*481 11
http://docs.phonegap.com/en/2.2.0/cordova_storage_storage.md.html#SQLError
操作数据库时发生错误时抛出SQLError对象.
该对象有两个属性:
因此,在您的代码中,您error.message
将很好地描述在哪个事务中出错.
我认为这正是你想要的,不是吗?
最好的问候,F481
.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
)。.transaction
如果您返回 true (或不返回任何内容),您指定的“成功”回调(其中的第三个)将运行。