MYSQL, bir ilişkisel veritabanı yönetim sistemidir. MySQL yönetimi için kullanacağımız kütüphanenin adı Go-MySQL-Driver. Kütüphanemizi aşağıdaki gibi komut satırına yazarak indirelim.
db adındaki fonksiyonel değişkenimize MySQL veritabanı bağlantı bilgilerimizi girdik. kullanici yeri MySQL kullanıcı adınızı, sifre yerine MySQL şifrenizi, 127.0.0.1:3306 yerine MySQL sunucunuzu e vtismi yerine de Veritabanı isminizi yazmayı unutmayın.
Daha sonra veritabanı bağlantı bilgilerimizi doğrulanmak için db.Ping() fonksiyonu ile bağlantı denemesi yolluyoruz. Bir hata ile karşılaşıldığında err değişkeninin içine hata çıktısını kaydedecektir.
Kolaylık olsun diye main() fonksiyonu dışına hata çıktılarını kontrol eden bir fonksiyon yazalım.
func kontrol(hata error){
if hata != nil{
log.Fatal(hata)
}
}
Eğer hata çıktısı almak istemiyorsanız. err değişkeni yerine _ (alt tire) koyabilirsiniz. Aynen şu şekilde:
Böyle bir tablo yapısını oluşturmak için aşağıdaki sorguyu çalıştırmamız gerekir.
CREATE TABLE kullanicilar (
id INT AUTO_INCREMENT,
kullanici TEXT NOT NULL,
sifre TEXT NOT NULL,
tarih DATETIME,
PRIMARY KEY (id)
);
Bu sorguyu Golang tarafında yapmak istersek aşağıdaki gibi yazabiliriz.
sorgu := `
CREATE TABLE kullanicilar (
id INT AUTO_INCREMENT,
kullanici TEXT NOT NULL,
şifre TEXT NOT NULL,
tarih DATETIME,
PRIMARY KEY (id)
);`
//Sorguyu çalıştırma
_, err := db.Exec(sorgu)
Bu işlemle birlikte MySQL veritabanımızda kullanicilar adında bir tablomuz oluşacaktır.
Tabloya Veri Girme
//Tabloyu sorgulayıp sonuçları değişkenlere yazdıralım
sorgu:= `SELECT id, kullanici, sifre, tarih FROM kullanicilar WHERE id = ?`
err := db.QueryRow(sorgu, sorguid).Scan(&id, &kullanici, &sifre, &tarih)
//Çıkan aldığımız verileri ekrana bastıralım
fmt.Println(id, kulanici, sifre, tarih)
Tablodaki Tüm Verileri Sıralama
var (
id int
kullanici string
sifre string
tarih time.Time
)
tablo, _ := db.Query(`SELECT id, kullanici, sifre, tarih FROM kullanicilar`)
defer tablo.Close() //tabloyu kapamayı unutmuyoruz
for tablo.Next() {
err := tablo.Scan(&id, &kullanici, &sifre, &tarih)
kontrol(err)
fmt.Println(id, kullanici, sifre, tarih) //kullaniciyi ekrana bastır
}
err := tablo.Err()
kontrol(err)
Eğer tablodaki verileri ekrana bastırmak yerine bir diziye (array) kaydetmek istiyorsak aşağıdaki gibi yapabiliriz.
type kullanici struct {
id int
kullanici string
sifre string
tarih time.Time
}
tablo, _ := db.Query(`SELECT id, kullanici, sifre, tarih FROM kullanicilar`)
defer rows.Close()
var kullanicilar []kullanici
for tablo.Next() {
var k kullanici
err := tablo.Scan(&k.id, &k.kullanici, &k.sifre, &k.tarih)
kontrol(err)
kullanicilar = append(kullanicilar, k)
}
err := tablo.Err()
kontrol(err)
Bu işlemin sonucunda kullanicilar dizimiz şu şekilde olacaktır.