登录
首页 >  Golang >  Go问答

如何检测 golang 中没有返回行的查询?

来源:stackoverflow

时间:2024-04-05 09:00:36 485浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《如何检测 golang 中没有返回行的查询?》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我用golang写了一个非常简单的数据库查询函数。伪代码是这样的:

var ctx = context.Background()
    conn, _ := sql.Open("firebirdsql", "SYSDBA:masterkey@localhost/"+BdLocation)
    defer conn.Close()
    rows, err := conn.QueryContext(ctx,"<sql query>")
    // my first attempt was to detect empty result here
    switch {
    case err == sql.ErrNoRows:
        < empty result logic >
        rows.Close()
        return 
    case err != nil:
        log.Fatal(err)      
    }
    defer rows.Close()
    // very 'primitive' logic, the only one that worked
    var count int = 0 
    for rows.Next() {
        < process row >
        count ++
    }
    // tried do get empty result here also
    if err := rows.Err(); err != nil {
       if err == sql.ErrNoRows {
          log.Println("Zero rows found")
       } else {
          panic(err)
       }
    }
    // this worked
    if count == 0 {
         < empty result logic >
    } else{
         < return result for processing >
    }

编译没问题,并且可以工作,但这只是因为我使用了“count”变量作为标志。我认为我正确地遵循了文档(和示例),但 err 始终为零,即使结果为空。正如测试一样,我在查询中插入了语法错误,并且检测到了它们。 我错过了什么吗?或者它只是不像我想象的那样工作? 感谢您的帮助。


解决方案


您可以检查 sql.ErrNoRows (https://golang.org/pkg/database/sql/#pkg-variables)

但是由于您使用的是 firebird sql 驱动程序...这可能是另一个错误。

我们假设所有驱动程序都实现并返回 golang 指定的内容...但这不可能是真的。

检查实际错误并在 Firebird 驱动程序上进行验证。

以上就是《如何检测 golang 中没有返回行的查询?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>