執行不傳回資料的 SQL 陳述式
當您執行不傳回資料的資料庫動作時,請使用 database/sql
套件中的 Exec
或 ExecContext
方法。您會以這種方式執行的 SQL 陳述式包括 INSERT
、DELETE
和 UPDATE
。
如果您的查詢可能會傳回列,請改用 Query
或 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 陳述式的函式
函式 | 說明 |
---|---|
DB.Exec DB.ExecContext
|
孤立執行單一 SQL 陳述式。 |
Tx.Exec Tx.ExecContext
|
在較大的交易中執行 SQL 陳述式。如需更多資訊,請參閱執行交易。 |
Stmt.Exec Stmt.ExecContext
|
執行已準備好的 SQL 陳述式。如需更多資訊,請參閱使用已準備好的陳述式。 |
Conn.ExecContext
|
供保留的連線使用。如需更多資訊,請參閱管理連線。 |