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

时间:2012-12-03 17:58:45

标签: database cordova error-handling

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

2 个答案:

答案 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属性是一个字符串,可能会返回如下内容:

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

其他信息是可能的!这是我在Chrome中调试时发现的少数几个。我在Phonegap中注意到消息更简洁:“没有这样的表:MyyTable

有两组成功/错误回调

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

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

所以请记住让你的语句回调(.executeSql中提到的函数,比如我原始问题的代码示例中的我的statement_error)返回true或false,具体取决于你是否想要你的事务错误回调(内部提到的第二个函数) .transaction)被击中。如果返回true(或不返回任何内容),将运行您指定的“成功”回调(.transaction内的第三个)回调。