Rumah >pembangunan bahagian belakang >Golang >Membaca data dari pelayan Mysql
import pakej yang diperlukan, kemudian sediakan struct dengan skema yang sama seperti dalam contoh jadual tb_student dalam pangkalan data, kemudian struct ini akan digunakan sebagai bekas untuk hasil pertanyaan jenis data.
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, }
Pemandu pangkalan data yang digunakan perlu diimport menggunakan tanda _, kerana walaupun ia diperlukan oleh pakej pangkalan data/sql, kami tidak berinteraksi secara langsung dengan pemandu.
Seterusnya, cipta fungsi untuk menyambung ke pangkalan data.
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 }
Skim rentetan sambungan untuk pemacu mysql yang kami gunakan agak unik, root@tcp(127.0.0.1:3306)/db_learn_go di bawah adalah skema rentetan sambungan yang boleh digunakan semasa pemanduan Pemacu MYSQL, jika anda menggunakan mysql lain, skema sambungan mungkin berbeza bergantung pada pemandu yang digunakan.
user:password@tcp(host:port)/dbname user@tcp(host:port)/dbname
Di bawah ialah penjelasan rentetan sambungan yang digunakan dalam fungsi connect().
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
Selepas fungsi untuk ketersambungan dengan pangkalan data telah dicipta, tiba masanya untuk mempraktikkan proses membaca data dari pelayan pangkalan data. Sediakan fungsi
sqlQuery() dengan kod berikut.
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) } }
Setiap kali sambungan baharu dibuat, jangan lupa untuk sentiasa menutup tika sambungan. Anda boleh menggunakan kata kunci defer seperti dalam kod di atas, defer
db.Close() .
Fungsi db.Query() digunakan untuk melaksanakan pertanyaan sql. Parameter kedua fungsi adalah variadic, jadi ia boleh dibiarkan kosong. Dalam kod di atas, anda dapat melihat bahawa nilai salah satu klausa where ialah tanda soal (?).
Tanda itu kemudiannya akan digantikan dengan nilai dalam parameter selepasnya (nilai pembolehubah umur). Teknik penulisan pertanyaan jenis ini sangat disyorkan, untuk mengelakkan suntikan sql. Fungsi ini menghasilkan contoh jenis sql.*Rows , yang juga perlu ditutup apabila ia tidak lagi digunakan ( defer rows.Close() ). Seterusnya, tatasusunan dengan pelajar struct jenis elemen disediakan dengan hasil nama . Kemudian hasil pertanyaan akan disimpan dalam pembolehubah. Kemudian gelung dilakukan dengan rujukan keadaan ialah rows.Next() . Gelung ini dilakukan seberapa banyak bilangan rekod, secara berurutan dari rekod pertama hingga akhir, satu demi satu. Kaedah Scan() sql.Rows berfungsi untuk mendapatkan semula nilai rekod yang sedang diulang, untuk disimpan dalam pembolehubah penunjuk. Pembolehubah yang digunakan untuk menyimpan medan rekod ditulis secara berurutan sebagai parameter variadik, mengikut medan yang dipilih dalam pertanyaan. Sila lihat perbandingan di bawah untuk butiran lanjut. // pertanyaan
pilih id, nama, gred ...
// imbas
rows.Scan(&each.id, &each.name, &each.gred ...
Data rekod yang diperoleh kemudian dilampirkan pada kepingan hasil, melalui pernyataan
hasil = tambah(hasil, setiap satu) .
OK, sekarang panggil sahaja fungsi sqlQuery() dalam main , kemudian jalankan program.
func main() {
sqlQuery()
}
Saya hanya seorang penulis blog biasa. Jika masih terlalu banyak kekurangan harap dimaafkan.
Atas ialah kandungan terperinci Membaca data dari pelayan Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!