5

我开始在 iPhone 上部署一个离线应用程序,但它仍在大量开发中。我的查询有一个简单的错误处理程序:

db.transaction(tx) {
    tx.executeSql("SELECT * FROM TABLE",[], successHandler, errorHandler);
});
function errorHandler(transaction, error) {
    alert("Error : " + error.message);
}

当我测试自己的应用程序并收到错误时,我设法找到生成错误的查询。但是当它是我的用户(当然是远程用户)时,这非常困难,因为错误消息并不具体。

有没有办法将上下文信息添加到我的错误消息中,例如 sql 查询或注释参数?

4

2 回答 2

12

你可以使用这样的模式:

  db.transaction(tx) {
    doQuery(tx, "SELECT * FROM TABLE",[],theSuccessHandler)
  });

  function doQuery(tx, query, values, successHandler) {
    tx.executeSql(query, values, successHandler, errorHandler);
    function errorHandler(transaction, error) {
        alert("Error : " + error.message + " in " + query);
    }
  }
于 2013-05-15T09:36:31.957 回答
1

我增强了 Myrne 的答案以添加查询参数和免费的上下文字符串:

function doQuery(tx, query, values, successHandler, context)
{
    tx.executeSql(query, values, successHandler, errorHandler);
    function errorHandler(transaction, error)
    {
        var text_context = context != undefined && context != "" ? "(" + context + ") " : "";
        alert("Error "+text_context+": " + error.message + " in " + query + " (params : "+values.join(", ")+")");
    }
}

这将返回这种错误:

错误(函数 update_commande):无法在 UPDATE 表 SET field2 = ?, field3 = 中准备语句(1 没有这样的列:field3)WHERE 字段 1 = ? (参数:1.63、1449、606)

于 2016-05-10T12:47:38.710 回答