如何在Phonegap中显示来自数据库错误回调的有用错误消息?

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可以有以下值:

  • UNKNOWN_ERR = 0
  • DATABASE_ERR = 1
  • VERSION_ERR = 2
  • TOO_LARGE_ERR = 3
  • QUOTA_ERR = 4
  • SYNTAX_ERR = 5
  • CONSTRAINT_ERR = 6
  • TIMEOUT_ERR = 7

是否有错误对象的任何其他属性/方法?
此时事务对象的属性/方法是什么?

我似乎无法找到一个很好的在线参考.当然不在Phonegap网站上!

F48*_*481 11

http://docs.phonegap.com/en/2.2.0/cordova_storage_storage.md.html#SQLError

操作数据库时发生错误时抛出SQLError对象.

该对象有两个属性:

  • 代码(您描述的常量之一)
  • message:错误的描述.

因此,在您的代码中,您error.message将很好地描述在哪个事务中出错.

我认为这正是你想要的,不是吗?

最好的问候,F481


Mag*_*ith 3

交易对象

.executeSql()据我所知,您可以对事务对象执行的唯一操作是调用其方法。我找不到该对象的任何属性。

错误对象

错误对象有一个.code包含数字的属性。您可以检查数值(请参阅上面我的原始问题)或使用类似以下内容的内容:
if (error.code == error.DATABASE_ERR) alert('nasty database error')

.message属性是一个字符串,可能返回如下内容:

  • 无法准备语句(“wibble”附近 1:语法错误)
  • 无法准备语句(1 没有这样的表:MyyTable)
  • 无法准备语句(1 个表 MyTable 没有名为 MyColunm 的列)
  • 无法执行语句(19 约束失败)

其他消息也可以!这只是我在 Chrome 中调试时发现的少数情况。我注意到 Phonegap 中的消息更简短:“没有这样的表:MyyTable

有两组成功/错误回调

另请注意,在初始调用时还有另一个数据库错误回调.transaction()。您的函数只会返回一个错误对象(没有事务对象)。

错误.code将为零,并且.message将是“语句回调引发异常或语句错误回调未返回 false ”。

因此,请记住让您的语句回调(里面提到的函数,.executeSql例如我原来问题的代码示例中的statement_error)返回 true 或 false,具体取决于您是否希望命中事务错误回调(里面提到的第二个函数.transaction)。.transaction如果您返回 true (或不返回任何内容),您指定的“成功”回调(其中的第三个)将运行。