添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

执行不返回数据的数据库操作时,请使用 database/sql 包中的 Exec ExecContext 方法。以这种方式执行的 SQL 语句包括 INSERT , DELETE , 和 UPDATE .

当查询可能返回行时,请改用 Query or QueryContext 方法。有关详细信息,请参阅 查询数据库

ExecContext 方法的工作方式与 Exec 方法相同,但具有附加 context.Context 参数,如 取消正在进行的操作 中所述。

以下示例中的代码使用 DB.Exec 执行语句以将新唱片专辑添加到 album 表中。

func AddAlbum(alb Album) (int64, error) {
    result, err := db.Exec("INSERT INTO album (title, artist) VALUES (?, ?)", alb.Title, alb.Artist)
    if err != nil {
        return 0, fmt.Errorf("AddAlbum: %v", err)
    // Get the new album's generated ID for the client.
    id, err := result.LastInsertId()
    if err != nil {
        return 0, fmt.Errorf("AddAlbum: %v", err)
    // Return the new album's ID.
    return id, nil

DB.Exec 返回值为: 一个sql.Result和一个错误。当错误为 nil时,您可以使用 Result获取最后插入的项目的 ID(如示例中所示)或检索受操作影响的行数。

注意: 预准备语句中的参数占位符因您使用的 DBMS 和驱动程序而异。例如,Postgres 的 pq 驱动需要一个占位符,例如是$1而不是?

如果您的代码将重复执行相同的 SQL 语句,请考虑使用一个sql.Stmt 从 SQL 语句创建可重用的预准备语句。有关更多信息,请参阅使用预准备语句

警告: 不要使用字符串格式化函数,例如 fmt.Sprintf 组装 SQL 语句!您可能会引入 SQL 注入风险。有关更多信息,请参阅避免 SQL 注入风险

用于执行不返回行的 SQL 语句的函数