Topik ini menjelaskan cara menggunakan API yang disediakan oleh pustaka database/sql Go untuk mengembangkan aplikasi LindormTable berbasis SQL, serta menyediakan contohnya.
Prasyarat
Go V1.17 atau versi lebih baru telah diinstal. Untuk informasi lebih lanjut tentang cara mengunduh dan menginstal Go, lihat dokumentasi resmi.
Alamat IP klien yang digunakan untuk mengakses LindormTable telah ditambahkan ke daftar putih Lindorm.
Batasan
Prosedur yang dijelaskan dalam topik ini tidak berlaku untuk LindormTable Serverless.
Prosedur
Tambahkan dependensi berikut ke file go.mod di proyek Go Anda:
require github.com/apache/calcite-avatica-go/v5 v5.0.0 replace github.com/apache/calcite-avatica-go/v5 => github.com/aliyun/alibabacloud-lindorm-go-sql-driver/v5 v5.0.6Tambahkan dependensi driver database ke file
.go. Blok kode berikut memberikan contohnya:import ( avatica "github.com/apache/calcite-avatica-go/v5" )Inisialisasi kolam koneksi dan konfigurasikan parameter terkait dalam metode main file
.go. Kode berikut memberikan contohnya:databaseUrl := "http://localhost:30060" conn := avatica.NewConnector(databaseUrl).(*avatica.Connector) conn.Info = map[string]string{ "user": "sql", "password": "test", "database": "default", } db := sql.OpenDB(conn) // Konfigurasikan parameter yang terkait dengan kolam koneksi. db.SetConnMaxIdleTime(8 * time.Minute) db.SetMaxOpenConns(20) db.SetMaxIdleConns(2)Tabel berikut menjelaskan parameter yang dapat dikonfigurasikan untuk kumpulan koneksi.
Parameter
Diperlukan
Deskripsi
databaseUrl
Ya
Titik akhir yang digunakan untuk menghubungkan ke SQL LindormTable. Contoh:
http://ld-bp12pc23yfb38****-proxy-lindorm.lindorm.rds.aliyuncs.com:30060. Untuk informasi selengkapnya tentang cara memperoleh titik akhir, lihat Lihat titik akhir LindormTable.user
Ya
Nama pengguna yang digunakan untuk terhubung ke LindormTable.
password
Ya
Kata sandi yang digunakan untuk menghubungkan ke LindormTable. Jika Anda lupa kata sandi, Anda dapat mengubah kata sandi di sistem manajemen kluster LindormTable.
database
Ya
Nama database yang ingin Anda akses.
SetConnMaxIdleTime
Tidak
Jangka waktu maksimum untuk koneksi idle. Nilai default: 0. Nilai default menunjukkan bahwa koneksi ke LindormTable tidak pernah habis masa berlakunya.
SetMaxOpenConns
Tidak
Jumlah maksimum koneksi dalam kumpulan koneksi. Nilai default: 0. Nilai default menunjukkan bahwa jumlah koneksi dalam kumpulan koneksi tidak dibatasi.
SetMaxIdleConns
Tidak
Jumlah maksimum koneksi idle dalam kumpulan koneksi. Nilai default: 2.
Lakukan operasi di LindormTable, seperti membuat tabel, menulis data ke tabel, menanyakan data, dan menghapus data. Contoh berikut menunjukkan cara melakukan operasi di LindormTable:
Buat tabel.
_, err := db.Exec("create table if not exists user_test(id int, name varchar,age int, primary key(id))") if err != nil { fmt.Println("create table error ", err) return }Tulis data ke tabel.
Metode 1: Tulis langsung data ke tabel.
_, err = db.Exec("upsert into user_test(id,name,age) values(1,'zhangsan',17)") if err != nil { fmt.Println("insert data error", err) return }Metode 2: Tulis data ke tabel dengan menentukan parameter.
stmt, err := db.Prepare("upsert into user_test(id,name,age) values(?,?,?)") if err != nil { fmt.Println("prepare error", err) return } _, err = stmt.Exec(1, "zhangsan", 17) if err != nil { fmt.Println("upsert error", err) return }
Tanyakan data.
Metode 1: Tanyakan langsung data.
rows, err := db.Query("select * from user_test") if err != nil { fmt.Println("query data error", err) return } defer rows.Close() var id int var name string var age int for rows.Next() { err = rows.Scan(&id, &name, &age) if err != nil { fmt.Println("scan data error", err) return } fmt.Println("id:", id, "name:", name, "age:", age) }Metode 2: Tanyakan data dengan menentukan parameter.
stmt, err = db.Prepare("select * from user_test where id=?") if err != nil { fmt.Println("prepare error", err) return } rows, err := stmt.Query(1) if err != nil { fmt.Println("query data error", err) return } defer rows.Close() var id int var name string var age int for rows.Next() { err = rows.Scan(&id, &name, &age) if err != nil { fmt.Println("scan data error", err) return } fmt.Println("id:", id, "name:", name, "age:", age) }
Hapus data.
_, err = db.Exec("delete from user_test where id=1") if err != nil { fmt.Println("delete data error", err) return }
CatatanDalam skenario bisnis di mana pernyataan serupa dieksekusi untuk menulis atau menanyakan data, kami sarankan menggunakan objek stmt yang diinisialisasi oleh metode Prepare untuk menulis atau menanyakan data. Dengan cara ini, pernyataan yang sama dianalisis, ditulis ulang, dan dioptimalkan secara batch, sehingga meningkatkan kinerja.
Untuk kode sampel lengkap, kunjungi Kode Sampel dan Tulis dan Tanyakan Data dengan Menentukan Parameter.