db.Query 是否返回 ErrNoRows?

use*_*186 5 go

当 sql 查询预计不会返回任何结果时,我似乎无法从 db.query 中获取 ErrNoRows 。

results, err := database.Query("SELECT title FROM accountProject WHERE accountID=? AND MATCH(title) AGAINST(?)", accountID, query)
if err != nil {
    if err == sql.ErrNoRows {
        return errProjectDoesNotExist
    }
    return err
}
Run Code Online (Sandbox Code Playgroud)

Cer*_*món 16

DB.QueryDB.QueryContext不返回值sql.ErrNoRows。当结果集没有行时,第一次调用Rows.Next将返回 false。

sql.ErrNoRows是从DB.QueryRowDB.QueryRowContext返回的占位符行上调用Row.Scan返回的。DB.QueryRow* 方法在出错时返回占位符行,而不是直接返回错误。

如果应用程序正在查找零行或一行,请使用 QueryRow 而不是 Query。

row := database.QueryRow("SELECT title FROM accountProject WHERE accountID=? AND MATCH(title) AGAINST(?)", accountID, query)
err := row.Scan( .... address of variables here ... )
if err == sql.ErrNoRows {
    return errProjectDoesNotExist
} else if err != nil {
    return err
}
Run Code Online (Sandbox Code Playgroud)