Java では、PreparedStatement メソッドとexecuteBatch() メソッドを使用して複数の SQL ステートメントをバッチで実行できます。しかし、Go の database/sql パッケージを使用して同じことをどのように達成できるでしょうか?
database/sql パッケージには、SQL ステートメントを実行できる Exec 関数が用意されています。ただし、引数は 1 セットのみとります。複数のステートメントをバッチ処理するには、可変引数関数を使用して、実行される個々のステートメントをすべて含む単一の SQL ステートメントを構築できます。
例を次に示します。
func bulkInsert(unsavedRows []*ExampleRowStruct) error { var ( valueStrings []string valueArgs []interface{} ) for _, post := range unsavedRows { valueStrings = append(valueStrings, "(?, ?, ?)") valueArgs = append(valueArgs, post.Column1) valueArgs = append(valueArgs, post.Column2) valueArgs = append(valueArgs, post.Column3) } stmt := fmt.Sprintf( "INSERT INTO my_sample_table (column1, column2, column3) VALUES %s", strings.Join(valueStrings, ","), ) _, err := db.Exec(stmt, valueArgs...) return err }
このコードは、すべての行をデータベースに挿入する単一の SQL ステートメント。個々のステートメントの引数 (値) を可変引数パラメーターとして渡すことにより、1 回のネットワーク ラウンドトリップで複数のステートメントを実行できます。テストの結果、このアプローチは SQL ステートメントのバッチ処理に Begin、Prepare、Commit メソッドを使用するよりも大幅に高速であることが示されています。
以上がGo のデータベース/sql パッケージを使用して SQL ステートメントを効率的にバッチ処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。