Heim >Backend-Entwicklung >Golang >Wie kann ich mit vorbereiteten Anweisungen effizient mehrere Datenzeilen in eine Go-Datenbank einfügen?

Wie kann ich mit vorbereiteten Anweisungen effizient mehrere Datenzeilen in eine Go-Datenbank einfügen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-23 01:36:26886Durchsuche

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

Effizientes Einfügen mehrerer Daten in Go

Das Einfügen mehrerer Datenzeilen in eine Datenbank in einem einzigen Vorgang kann die Effizienz erheblich verbessern. In Go wird dies häufig durch die Verwendung vorbereiteter Anweisungen erreicht. Die Verwendung der Zeichenfolgenverkettung, wie in Ihrer Frage gezeigt, mag zwar praktisch erscheinen, ist jedoch weniger sicher und kann zu SQL-Injection-Schwachstellen führen.

Verwenden vorbereiteter Anweisungen

Zum Einfügen mehrerer Zeilen mit Nachdem Sie vorbereitete Anweisungen erstellt haben, können Sie die folgenden Schritte ausführen:

  1. Erstellen Sie eine Vorlage für eine SQL-Anweisung mit Platzhaltern für die Daten Werte:
INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)
  1. Bereiten Sie die Anweisung mit der db.Prepare-Methode vor:
stmt, err := db.Prepare(sqlStr)
if err != nil {
    // Handle error
}
  1. Erstellen Sie für jede Zeile ein Wertesegment :
vals := []interface{}{}

for _, dataRow := range data {
    vals = append(vals, dataRow["v1"], dataRow["v2"], dataRow["v3"])
}
  1. Führen Sie die Anweisung mit aus Werte:
res, err := stmt.Exec(vals...)
if err != nil {
    // Handle error
}

Dieser Ansatz stellt sicher, dass die SQL-Anweisung nur einmal geparst wird und die Werte sicher als Parameter eingefügt werden.

Beispiel:

Hier ist ein Beispiel für das Einfügen mehrerer Zeilen in eine „Test“-Tabelle mithilfe vorbereiteter Anweisungen:

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

Das obige ist der detaillierte Inhalt vonWie kann ich mit vorbereiteten Anweisungen effizient mehrere Datenzeilen in eine Go-Datenbank einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn