8

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

  • 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网站上!

4

2 回答 2

11

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

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

这个对象有两个属性:

  • 代码(您描述的常量之一)
  • 消息:错误的描述。

所以在你的代码error.message中会给你一个很好的描述,说明在哪个事务中出了什么问题。

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

最好的问候, F481

于 2012-12-14T14:32:14.223 回答
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)返回真或假,具体取决于您是否希望您的事务错误回调(里面提到的第二个函数.transaction)被击中。.transaction如果您返回 true(或不返回任何内容),您指定的“成功”回调(内部的第三个)将运行。

于 2012-12-19T11:02:15.657 回答