我在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/