Importieren Sie die erforderlichen Pakete und bereiten Sie dann eine Struktur mit demselben Schema wie im Beispiel der Tabelle tb_student in der Datenbank vor. Später wird diese Struktur als Container für das Abfrageergebnis verwendet Datentyp.
package main import "fmt" import "database/sql" import _ "github.com/go-sql-driver/mysql" type student struct { id string, name string, age int, grade int, }
Der verwendete Datenbanktreiber muss mit dem _-Zeichen importiert werden, denn obwohl er vom Datenbank-/SQL-Paket benötigt wird, interagieren wir nicht direkt mit dem Treiber.
Als nächstes erstellen Sie eine Funktion, um eine Verbindung zur Datenbank herzustellen.
func connect() (*sql.DB, error) { db, err := sql.Open("mysql","root:@tcp(127.0.0.1:3306)/db_learn_go") if err != nil { return nil, err } return db, nil }
Das Verbindungszeichenfolgenschema für den von uns verwendeten MySQL-Treiber ist ziemlich einzigartig. Root@tcp(127.0.0.1:3306)/db_learn_go unten ist ein Verbindungszeichenfolgenschema, das unterwegs verwendet werden kann MYSQL-Treiber Treiber, wenn Sie verwenden Bei einem anderen MySQL kann das Verbindungsschema je nach verwendetem Treiber unterschiedlich sein.
user:password@tcp(host:port)/dbname user@tcp(host:port)/dbname
Nachfolgend finden Sie eine Erläuterung der Verbindungszeichenfolge, die in der Funktion connect() verwendet wird.
root@tcp(127.0.0.1:3306)/db_learn_go // user => root // password => // host => 127.0.0.1 atau localhost // port => 3306 // dbname => db_learn_go
Nachdem die Funktion für die Konnektivität mit der Datenbank erstellt wurde, ist es an der Zeit, den Vorgang des Lesens von Daten vom Datenbankserver zu üben. Bereiten Sie die Funktion vor
sqlQuery() mit dem folgenden Code.
func sqlQuery() { db, err := connect() if err != nil { fmt.Println(err.Error()) return } defer db.Close() var age = 27 rows, err := db.Query("select id, name, grade from tb_student where age = ? if err != nil { fmt.Println(err.Error()) return } defer rows.Close() var result []student for rows.Next() { var each = student{} var err = rows.Scan(&each.id, &each.name, &each.grade) if err != nil { fmt.Println(err.Error()) return } result = append(result, each) } if err = rows.Err(); err != nil { fmt.Println(err.Error()) return } for _, each := range result { fmt.Println(each.name) } }
Vergessen Sie nicht, jedes Mal, wenn eine neue Verbindung erstellt wird, die Verbindungsinstanz zu schließen. Sie können das Schlüsselwort defer wie im obigen Code verwenden: defer
db.Close() .
Die Funktion db.Query() wird zum Ausführen von SQL-Abfragen verwendet. Der zweite Parameter der Funktion ist variadisch und kann daher leer gelassen werden. Im obigen Code können Sie sehen, dass der Wert einer der where-Klauseln ein Fragezeichen (?) ist.
Das Vorzeichen wird dann durch den Wert im Parameter danach (den Wert der Altersvariablen) ersetzt. Diese Art der Abfrageschreibtechnik wird dringend empfohlen, um eine SQL-Injection zu verhindern. Die Funktion erzeugt eine Instanz vom Typ sql.*Rows , die ebenfalls geschlossen werden muss, wenn sie nicht mehr verwendet wird ( defer rows.Close() ). Als nächstes wird ein Array mit dem Elementtyp struct student mit dem Namen result vorbereitet. Später werden die Abfrageergebnisse in der Variablen gespeichert. Dann wird eine Schleife ausgeführt, wobei die Bedingungsreferenz rows.Next() ist. Diese Schleife wird so oft wie die Gesamtzahl der Datensätze ausgeführt, der Reihe nach vom ersten Datensatz bis zum Ende, einer nach dem anderen. Die Scan()-Methode von sql.Rows dient dazu, den Wert des Datensatzes abzurufen, der iteriert wird, um ihn in einer Zeigervariablen zu speichern. Die zum Speichern der Datensatzfelder verwendeten Variablen werden entsprechend den in der Abfrage ausgewählten Feldern sequentiell als variadische Parameter geschrieben. Weitere Einzelheiten finden Sie im Vergleich unten. // Abfrage
ID, Name, Note auswählen ...
// scannen
rows.Scan(&each.id, &each.name, &each.grade ...
Die erhaltenen Datensatzdaten werden dann über die Anweisung
an den Ergebnis-Slice angehängt.
result = append(result, every) .
OK, rufen Sie jetzt einfach die Funktion sqlQuery() in main auf und führen Sie dann das Programm aus.
func main() {
sqlQuery()
}
Ich bin nur ein gewöhnlicher Blog-Autor. Wenn es immer noch zu viele Mängel gibt, verzeihen Sie mir bitte.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3