一尘不染

如何查找从db.Query postgres返回的行数

go

我正在使用goLang lib / pq驱动程序,并尝试从数据库中获取行。

rows, err := db.Query("select id, name from mytable limit 5")

我想要一个if else子句,该子句检查结果集中是否有行,我这样做了:

if(!rows.Next()){
   log.Printf("no rows returned")
} else {
   log.Printf("rows returned")
}

但这总是少给我1条记录,由于该if子句,我认为它会跳过一条记录,因为一旦我删除了if子句,我就会正确地获得所有记录。我如何知道从选择查询返回的行数而不执行另一个查询?


阅读 168

收藏
2020-07-02

共1个答案

一尘不染

使用“ 行”对象时,没有任何帮助程序方法可以一步完成总行数的计算。

一个简单但较慢的解决方案是使用增量变量存储行数来遍历所有结果:

// error handling omitted
rows, _ := db.Query("SELECT * FROM table")
defer rows.Close()

counter := 0
for rows.Next() {
 // you can even scan+store the result if you need them later
 counter++
}

fmt.Println("we have", counter, "rows")

否则,如果您的目标只是“计数”行数,请使用QueryRow使用更专用的查询

// error handling omitted
var counter int

db.QueryRow("SELECT count(*) FROM table").Scan(&counter)

fmt.Println("we have", counter, "rows")
2020-07-02