Ionic Cordova SQLite插件- UPDATE语句不总是成功-需要指导

8wtpewkr  于 2023-04-03  发布在  Ionic
关注(0)|答案(1)|浏览(120)

我们有一个数据库表,其中有一个名为image1的列-这包含一个图像的base 64字符串。然后我们将该字符串上传到第三方服务,该服务创建一个图像并传回一个URL。然后我们使用URL更新image1
这似乎在70%的情况下都能正常工作,但到目前为止,我还无法解释列不更新的次数。这是我写的函数:

updatePhotoURL(dbid, photoUrl) {
    console.group("### updatePhotoURL() called, dbid, photoUrl:", dbid, photoUrl);

    let sqlQuery = 'UPDATE table SET image1=? WHERE dbid=?'

    return new Observable<object>((obs) => {
      this.openDatabase()
        .flatMap((db) => {
          return Observable.fromPromise(db.executeSql(sqlQuery, [photoUrl, dbid]))
        })
        .catch((error) => {
          console.info("### error")
          console.table(error)

          let extra = `dbid: ${dbid == undefined ? 'undefined' : dbid}, `

          if (photoUrl == undefined) {
            extra += `photoUrl: undefined`
          } else {
            extra += `photoUrl: ${photoUrl.length > 0 ? photoUrl.substr(0, 20) + "..." : ""}`
          }

          obs.error({ r: "updatePhotoURL() catch()", s: error.code, m: error.message, e: extra })
          obs.complete()

          return error;
        })
        .map((dbUpdate) => {
          if (dbUpdate.rowsAffected == 0) {

            let extra = `dbid: ${dbid == undefined ? 'undefined' : dbid},`

            if (photoUrl == undefined) {
              extra += `photoUrl: undefined`
            } else {
              extra += `photoUrl: ${photoUrl.length > 0 ? photoUrl.substr(0, 20) + "..." : ""}`
            }

            obs.error({ r: "updatePhotoURL() function", s: 0, m: 'Could not update photo URL for this snag in storage', e: extra })

          } else {
            obs.next(dbUpdate)
          }

          obs.complete()

          return dbUpdate
        })
        .subscribe((success) => {

          console.groupEnd()

        });
    });
  }

正如我之前所说,这在很多时候都有效,但偶尔我们会看到数据库没有更新,我不明白为什么。我已经在SQL语句执行中添加了catch(),所以如果有任何错误,我们就会抓住它。但是我似乎从来没有从中得到任何东西。之后,我得到了一个map()函数,它检查rowsAffected的值是否等于0 -所以如果出于某种原因,我们我们在执行SQL语句时没有看到错误,那么我们会触发一个错误,因为数据库行没有受到影响。
我可以确认该行的dbid确实存在,并且photoUrl的值肯定是一个字符串URL。还有什么我可以检查或应该注意的吗?
谢谢bengrah

eaf3rand

eaf3rand1#

如果没有有关错误消息或任何特定日志的详细信息,很难确定列未更新的确切原因。但是,以下几种可能的情况可能有助于您解决此问题:
第三方服务错误:如果创建图像并返回URL的第三方服务遇到问题或已关闭,则该列可能无法更新。在这种情况下,您可以尝试记录第三方服务的响应,以检查是否有任何错误或URL是否正确返回。
数据库连接问题:数据库连接可能失败,这可能导致列不更新。您可以尝试记录与数据库连接相关的任何错误,以检查是否存在这种情况。
base64字符串无效或不完整:如果image1列中的base 64字符串无效或不完整,则第三方服务可能无法创建图像并返回URL。在这种情况下,您可以尝试记录base 64字符串以检查它是否有效和完整。
不正确的SQL查询:如果SQL查询不正确,可能会导致列不更新。您可以尝试记录SQL查询,以检查它是否正确并与表结构匹配。
我建议在函数中添加更多的日志记录和错误处理,以帮助确定问题的根本原因。此外,您可以尝试使用不同的base 64字符串和URL测试函数,以查看问题是一致的还是间歇性的。

相关问题