Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取使用数据库/sql时返回的行数?_Sql_Go - Fatal编程技术网

如何获取使用数据库/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=。。。。