mysql - 我如何检查我的 Db.Query 是否返回空行

标签 mysql postgresql go

以下是我从 db 获取多行的代码,它可以工作。


    defer db.Close()
    for rows.Next() {
    err = rows.Scan(&a)
    if err != nil {
        log(err)
    }

如何检查行是否包含 No row?

即使我尝试如下
if err == sql.ErrNoRows {
        fmt.Print(No rows)
    }  

并在扫描时检查
 err = rows.Scan(&a)
 if err == sql.ErrNoRows {
        fmt.Print(No rows)
    }  

我不明白哪一个给出 ErrNoRows *Rows 或 err 或 Scan

最佳答案

QueryRow 返回 *Row (不是 *Rows )并且您不能遍历结果(因为它只期望返回一行)。这意味着 rows.Scan在您的示例代码中将 not compile )。

如果您希望 SQL 查询返回单个结果(例如,您正在运行 count() 或使用 ID 进行选择),请使用 QueryRow;例如(修改自 here ):

id := 43
var username string
err = stmt.QueryRow("SELECT username FROM users WHERE id = ?", id).Scan(&username)
switch {
case err == sql.ErrNoRows:
    log.Fatalf("no user with id %d", id)
case err != nil:
    log.Fatal(err)
default:
    log.Printf("username is %s\n", username)
}

如果您期望多行,请使用 Query() 例如(修改自 here ):
age := 27
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
if err != nil {
    log.Fatal(err)
}
defer rows.Close()
names := make([]string, 0)
for rows.Next() {
    var name string
    if err := rows.Scan(&name); err != nil {
        log.Fatal(err)
    }
    names = append(names, name)
}
// Check for errors from iterating over rows.
if err := rows.Err(); err != nil {
    log.Fatal(err)
}
// Check for no results
if len(names) == 0 {
    log.Fatal("No Results")
}
log.Printf("%s are %d years old", strings.Join(names, ", "), age)

上面显示了一种检查是否没有结果的方法。如果您没有将结果放入 slice/ map 中,那么您可以在循环中保留一个计数器或设置一个 bool 值。请注意,如果没有结果,则不会返回任何错误(因为这是一个完全有效的结果),并且 SQL 包除了迭代它们之外没有提供检查结果数量的方法(如果您感兴趣的只是结果然后运行 ​​select count(*)... )。

关于mysql - 我如何检查我的 Db.Query 是否返回空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106885/

相关文章:

java - 如何将 Java 桌面应用程序连接到在线 mysql 数据库?

sql - ROW_NUMBER 条查询数据是否需要获取整个结果集?

javascript - 如何将 item 更新到 PostgreSQL 中的 jsonb 数据类型列

http - Golang ListenAndServeTLS 在浏览器中不使用 https 时返回数据

struct - 在 Golang 中返回接口(interface)

php - 如何处理 PHP+MySQL 中的 UTF-8 与 Latin-1 编码问题

mysql - 了解 wordpress the_content

memory-management - 如何在go中释放内存?

mysql.server start 不会启动 mysql 服务器

sql - Postgres : Replace a view that has dependencies