在golang中,DB.Query()和DB.Prepare()+Stmt.Query()有什么区别?

4

这是一个参考链接:http://go-database-sql.org/prepared.html - itczl
1个回答

3

DB.Query

func (db *DB) Query(query string, args ...interface{}) (*Rows, error)

Query executes a query that returns rows, typically a SELECT. The args are for any placeholder parameters in the query.

根据定义,此函数接受一个查询并返回可迭代的行。

DB.Prepare() + Stmt.Query()

func (db *DB) Prepare(query string) (*Stmt, error)

Prepare creates a prepared statement for later queries or executions. Multiple queries or executions may be run concurrently from the returned statement

func (s *Stmt) Query(args ...interface{}) (*Rows, error)

Query executes a prepared query statement with the given arguments and returns the query results as a *Rows.

由于 DB.prepare 可以接受多个查询,并且 Stmt.Query 可以并发地运行它们,因此可以使用它来实现运行多个并发查询,而不像 DB.Query 只能用于执行单个查询


1
但是我想在特定时间点执行一个单独的查询,这两者有区别吗?如果我有一个特定的查询,我打算使用多次(带有不同的参数),但很少并且不并行,我是否仍然需要准备一个语句?在整个应用程序的生命周期内不关闭 Stmt 有意义吗? - Dina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接