gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:34:49 25 4
gpt4 key购买 nike

以下是我从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com