如何获取使用数据库/sql时返回的行数?
鉴于以下功能:如何获取使用数据库/sql时返回的行数?,sql,go,Sql,Go,鉴于以下功能: func (me *OrderService) GetOrders(orderTx *sql.Tx, orderId int) (orders *sql.Rows) { orders, err := ecommTx.Query("SELECT * FROM orders WHERE id=?", orderId) if err != nil { log.Fatal(err) } log.Printf("Successfully qu
func (me *OrderService) GetOrders(orderTx *sql.Tx, orderId int) (orders *sql.Rows) {
orders, err := ecommTx.Query("SELECT * FROM orders WHERE id=?", orderId)
if err != nil {
log.Fatal(err)
}
log.Printf("Successfully queried and receive %d orders", orders.count)
return orders
}
有没有简单的方法来计算结果?我想保持这个数据库引擎的竞争性,但FWIW。。。。我正在使用它进行集成测试,但计划在prod中使用不同的DB。没有可移植的方法提前知道语句返回的行数,这意味着不需要迭代返回的游标和计数 有两种典型的解决方案: 运行单独的COUNT*查询。这种方法的问题在于,至少在某些事务隔离模式下,结果集可以在两个查询之间修改,这非常快速,因此它实际上只适用于寻呼机之类的事情,在寻呼机中,您执行的查询只返回结果集的一部分,并且希望知道还有多少行 遍历光标并计数。在Go中,这意味着调用.Next,然后.将结果扫描到Order结构中
没有可移植的方法提前知道语句返回的行数,这意味着不需要迭代返回的游标和计数 有两种典型的解决方案: 运行单独的COUNT*查询。这种方法的问题在于,至少在某些事务隔离模式下,结果集可以在两个查询之间修改,这非常快速,因此它实际上只适用于寻呼机之类的事情,在寻呼机中,您执行的查询只返回结果集的一部分,并且希望知道还有多少行 遍历光标并计数。在Go中,这意味着调用.Next,然后.将结果扫描到Order结构中 Query返回*行。行是读卡器,而不是集合,因此诸如count或len等调用是不相关的。您必须通读各行才能知道有多少条目:
count := 0
for orders.Next() {
count++
}
log.Printf("Successfully queried and receive %d orders", count)
这样做不会增加任何额外的开销。其他语言(如C或Delphi)可能返回带有count属性的集合,它们只是为您进行读取,并将结果打包到集合中以方便您使用。sql.Query返回*行。行是读卡器,而不是集合,因此诸如count或len等调用是不相关的。您必须通读各行才能知道有多少条目:
count := 0
for orders.Next() {
count++
}
log.Printf("Successfully queried and receive %d orders", count)
这样做不会增加任何额外的开销。其他语言(如C或Delphi)可能返回带有count属性的集合,它们只是为您进行读取,并将结果打包到集合中以方便您使用。SELECT count*FROM orders,其中id=…SELECT count*FROM orders,其中id=。。。。