ホームページ > バックエンド開発 > Golang > 準備されたステートメントを使用して Go データベースに複数行のデータを効率的に挿入するにはどうすればよいですか?

準備されたステートメントを使用して Go データベースに複数行のデータを効率的に挿入するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-23 01:36:26
オリジナル
788 人が閲覧しました

How Can I Efficiently Insert Multiple Rows of Data into a Go Database Using Prepared Statements?

Go での効率的な複数データ挿入

1 回の操作でデータベースに複数のデータ行を挿入すると、効率が大幅に向上します。 Go では、これを実現する一般的な方法の 1 つは、準備されたステートメントを使用することです。質問で示されているように文字列連結を使用すると便利に見えるかもしれませんが、安全性が低く、SQL インジェクションの脆弱性を引き起こす可能性があります。

準備されたステートメントの使用

複数の行を挿入するには準備されたステートメントを使用するには、次の手順に従います。

  1. 次のテンプレート SQL ステートメントを作成します。データ値のプレースホルダー:
INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)
ログイン後にコピー
  1. db.Prepare メソッドを使用してステートメントを準備します:
stmt, err := db.Prepare(sqlStr)
if err != nil {
    // Handle error
}
ログイン後にコピー
  1. のスライスを構築しますそれぞれの値行:
vals := []interface{}{}

for _, dataRow := range data {
    vals = append(vals, dataRow["v1"], dataRow["v2"], dataRow["v3"])
}
ログイン後にコピー
  1. 値を使用してステートメントを実行します:
res, err := stmt.Exec(vals...)
if err != nil {
    // Handle error
}
ログイン後にコピー

このアプローチでは、SQL ステートメントが 1 回だけ解析され、その値が保証されます。のようにしっかりと挿入されていますパラメータ。

例:

プリペアド ステートメントを使用して「テスト」テーブルに複数の行を挿入する例を次に示します:

import (
    "database/sql"
    "fmt"
)

type DataRow struct {
    v1 string
    v2 string
    v3 string
}

func main() {
    data := []DataRow{
        {v1: "1", v2: "1", v3: "1"},
        {v1: "2", v2: "2", v3: "2"},
        {v1: "3", v2: "3", v3: "3"},
    }

    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database")
    if err != nil {
        // Handle error
    }

    sqlStr := "INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        // Handle error
    }

    vals := []interface{}{}
    for _, dataRow := range data {
        vals = append(vals, dataRow.v1, dataRow.v2, dataRow.v3)
    }

    res, err := stmt.Exec(vals...)
    if err != nil {
        // Handle error
    }

    affectedRows, err := res.RowsAffected()
    if err != nil {
        // Handle error
    }

    fmt.Printf("Inserted %d rows", affectedRows)
}
ログイン後にコピー

以上が準備されたステートメントを使用して Go データベースに複数行のデータを効率的に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート