Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memasukkan Berbilang Baris Data dengan Cekap ke dalam Pangkalan Data Go Menggunakan Penyata Disediakan?

Bagaimanakah Saya Boleh Memasukkan Berbilang Baris Data dengan Cekap ke dalam Pangkalan Data Go Menggunakan Penyata Disediakan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-23 01:36:26786semak imbas

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

Sisipan Berbilang Data yang Cekap dalam Go

Memasukkan berbilang baris data ke dalam pangkalan data dalam satu operasi boleh meningkatkan kecekapan dengan ketara. Dalam Go, satu cara biasa untuk mencapai ini adalah melalui penggunaan pernyataan yang disediakan. Walaupun menggunakan penggabungan rentetan seperti yang ditunjukkan dalam soalan anda mungkin kelihatan mudah, ia kurang selamat dan boleh membawa kepada kelemahan suntikan SQL.

Menggunakan Penyata Disediakan

Untuk memasukkan berbilang baris menggunakan penyata yang disediakan, anda boleh mengikuti langkah berikut:

  1. Buat templat pernyataan SQL dengan ruang letak untuk nilai data:
INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)
  1. Sediakan pernyataan menggunakan db.Sediakan kaedah:
stmt, err := db.Prepare(sqlStr)
if err != nil {
    // Handle error
}
  1. Bina sekeping nilai untuk setiap baris:
vals := []interface{}{}

for _, dataRow := range data {
    vals = append(vals, dataRow["v1"], dataRow["v2"], dataRow["v3"])
}
  1. Laksanakan pernyataan dengan nilai:
res, err := stmt.Exec(vals...)
if err != nil {
    // Handle error
}

Pendekatan ini memastikan bahawa pernyataan SQL hanya dihuraikan sekali dan nilai dimasukkan dengan selamat sebagai parameter.

Contoh:

Berikut ialah contoh memasukkan berbilang baris ke dalam jadual "ujian" menggunakan disediakan kenyataan:

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)
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memasukkan Berbilang Baris Data dengan Cekap ke dalam Pangkalan Data Go Menggunakan Penyata Disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn