【问题标题】:Return an error when no rows are returned by a query that is expected to return multiple rows当预期返回多行的查询没有返回任何行时返回错误
【发布时间】:2022-01-24 17:36:11
【问题描述】:

我有下面的代码 sn-p,其想法是从我们所有的仓库中获取客户的忠诚度积分。客户有可能拥有 id 但未注册忠诚度。

使用该客户的 id 将导致下面的查询返回零行,这不是错误。

我想在发生这种情况时返回一个错误,以便以后处理。 我正在寻找最好的方法来做到这一点。

我是编程和 golang 的新手,我还不太清楚自己的方法。

query := `select coalesce(lc.total_points, 0), 
        w.machine_name from 
        lcustomerpoints lc
        join warehouses w
        on lc.machine_ip = w.machine_ip
        where lc.loyaltycard_number = $1;`

    rows, err := l.DB.Query(query, user_id)
    if err != nil {
        return nil, err
    }

    defer rows.Close()

    loyaltyPoints := []*LoyaltyPoint{}

    for rows.Next() {
        l := LoyaltyPoint{}

        err := rows.Scan(&l.Points, &l.Outlet)
        if err != nil {
            return nil, err
        }

        loyaltyPoints = append(loyaltyPoints, &l)

    }

    if err = rows.Err(); err != nil {
        return nil, err
    }

【问题讨论】:

  • 您的查询文本没有被引用是因为什么原因?
  • 在我的实际代码中,它被引用了,当它粘贴到这里时,它与代码格式混淆了,所以我把它删除了。
  • 很奇怪,在您使用的三个反引号(“```”)中,它应该可以正常工作。我会重新为你添加它
  • 可能是我没做对。谢谢您的帮助。下次注意。

标签: postgresql go


【解决方案1】:

计算for 循环的迭代次数:

    count := 0
    for rows.Next() {
        count++
        ...
    }
    if count == 0 {
       return fmt.Errorf("Got 0 rows from query")
    }

【讨论】:

  • 非常感谢,丹尼尔工作得很好。
猜你喜欢
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多