更新时间:2026-10-21 GMT+08:00
分享

type Stmt

type Stmt接口主要用于预处理SQL语句,常用方法如表1所示。

表1 type Stmt接口的常用方法

方法

描述

返回值类型

(s *Stmt)Close()

关闭指定的预处理语句。

error

(s *Stmt)Exec(args ...interface{})

执行不返回数据行的预处理语句。支持PBE特性。PBE(Prepare-Bind-Execute)是一种发送和执行查询的方式,DN可通过复杂查询协议接收PBE报文执行语句。
说明:
  • 预处理语句的占位符可为“$”也可为“?”。
  • 预处理语句的占位符数量受数据库限制,当表字段超过数据库限制或与当前表字段数目不匹配时,由服务端返回错误。
  • PBE特性支持增、删、改操作,批量操作时U报文最大长度限制为1023MB。超出长度限制会报错:
    bind message length XXX too long. This can be caused by very large or incorrect length specifications on InputStream parameters.
  • 单条数据插入时,使用PBE与单插接口(conn.simpleExec,简单执行语句)相比性能大幅下降,建议优先使用单插接口而非PBE。
  • 驱动底层错误处理重构后,PBE性能与之前相比下降幅度在5%以内。

Result, error

(s *Stmt)ExecContext(ctx context.Context, args ...interface{})

在给定的上下文中执行不返回数据行的预处理语句。

Result, error

(s *Stmt)Query(args ...interface{})

执行预处理语句,以*Rows形式返回查询结果。

*Rows, error

(s *Stmt)QueryContext(ctx context.Context, args ...interface{})

在给定的上下文中执行预处理语句,以*Rows形式返回查询结果。

*Rows, error

(s *Stmt)QueryRow(args ...interface{})

执行预处理语句,以*Row形式返回查询结果。

*Row

(s *Stmt)QueryRowContext (ctx context.Context, args ...interface{})

在给定的上下文中执行预处理语句,以*Row形式返回查询结果。

*Row

参数说明

表2 常用方法的参数说明

参数

参数说明

ctx

表示给定的上下文。

args

待执行SQL语句需要绑定的参数。支持按位置绑定和按名称绑定,参见示例。

  • Query类方法Query()、QueryContext()、QueryRow()、QueryRowContext()用于执行返回数据行的语句。
  • Exec类方法Exec()、ExecContext()用于执行不返回数据行的语句。
  • 若使用Query类方法执行DML操作,则可能出现执行结果与预期不符的情况。因此不建议使用Query类方法执行增、删、改操作。

相关文档