go - 如何检测golang中未返回任何行的查询?

标签 go rows

我在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驱动程序上进行验证。

关于go - 如何检测golang中未返回任何行的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63979761/

相关文章:

go - 设置 os.Mkdir 权限

go - 搜寻器的并发问题

Golang segmentio/kafka-go 消费者不工作

http - [go]自定义服务器处理特定路径的请求

mysql - 计算mysql中表的行数

c++ - 在 C++ 中动态分配二维数组的行

android - 动态添加行,setOnClickListener TextView

go - 如何在 gRPC 协议(protocol)中接受和验证这个映射?

python-3.x - 如何使用 Python 将行转换为 excel(.xls) 中的列?

java - 单击 JButton 后更新 JTable