GUI (Grafiksel Kullanıcı Arayüzü)
MySQL
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.
go get -u github.com/go-sql-driver/mysql
MySQL paketlerimizi import edelim.
1
import "database/sql"
2
import _ "go-sql-driver/mysql"
Copied!
MySQL Bağlantısını Yapma Daha sonra main() fonksiyonumuz içerisinde MySQL bağlantımızı yapalım.
1
package main
2
import "database/sql"
3
import _ "go-sql-driver/mysql"
4
func main(){
5
db, err := sql.Open("mysql", "kullanici:[email protected](127.0.0.1:3306)/vtismi?parseTime=true")
6
err := db.Ping()
7
}
Copied!
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.
1
func kontrol(hata error){
2
if hata != nil{
3
log.Fatal(hata)
4
}
5
}
Copied!
Eğer hata çıktısı almak istemiyorsanız. err değişkeni yerine _ (alt tire) koyabilirsiniz. Aynen şu şekilde:
1
db, _ := sql.Open("mysql", "kullanici:[email protected](127.0.0.1:3306)/vtismi?parseTime=true")
Copied!
İlk Tabloyu Oluşturma Tablomuz şu şekilde olacak;
id
kullanici
sifre
tarih
1
kaan
1234
2019-08-10 12:30:00
Böyle bir tablo yapısını oluşturmak için aşağıdaki sorguyu çalıştırmamız gerekir.
1
CREATE TABLE kullanicilar (
2
id INT AUTO_INCREMENT,
3
kullanici TEXT NOT NULL,
4
sifre TEXT NOT NULL,
5
tarih DATETIME,
6
PRIMARY KEY (id)
7
);
Copied!
Bu sorguyu Golang tarafında yapmak istersek aşağıdaki gibi yazabiliriz.
1
sorgu := `
2
CREATE TABLE kullanicilar (
3
id INT AUTO_INCREMENT,
4
kullanici TEXT NOT NULL,
5
şifre TEXT NOT NULL,
6
tarih DATETIME,
7
PRIMARY KEY (id)
8
);`
9
//Sorguyu çalıştırma
10
_, err := db.Exec(sorgu)
Copied!
Bu işlemle birlikte MySQL veritabanımızda kullanicilar adında bir tablomuz oluşacaktır. Tabloya Veri Girme
1
kullaniciDegeri := "johndoe"
2
sifreDegeri := "secret"
3
tarihDegeri := time.Now()
4
sonuc, err := db.Exec(`INSERT INTO kullanicilar (kullanici, sifre, tarih) VALUES (?, ?, ?)`, kullaniciDegeri, sifreDegeri, tarihDegeri)
5
kullaniciID, err := sonuc.LastInsertId()
6
fmt.Println("Eklenen kullanıcının id'si:", kullaniciID)
Copied!
Tabloya Sorgu Yapma
1
//Tabloyu sorgulayıp sonuçları değişkenlere yazdıralım
2
sorgu:= `SELECT id, kullanici, sifre, tarih FROM kullanicilar WHERE id = ?`
3
err := db.QueryRow(sorgu, sorguid).Scan(&id, &kullanici, &sifre, &tarih)
4
//Çıkan aldığımız verileri ekrana bastıralım
5
fmt.Println(id, kulanici, sifre, tarih)
Copied!
Tablodaki Tüm Verileri Sıralama
1
var (
2
id int
3
kullanici string
4
sifre string
5
tarih time.Time
6
)
7
tablo, _ := db.Query(`SELECT id, kullanici, sifre, tarih FROM kullanicilar`)
8
defer tablo.Close() //tabloyu kapamayı unutmuyoruz
9
for tablo.Next() {
10
err := tablo.Scan(&id, &kullanici, &sifre, &tarih)
11
kontrol(err)
12
fmt.Println(id, kullanici, sifre, tarih) //kullaniciyi ekrana bastır
13
}
14
err := tablo.Err()
15
kontrol(err)
Copied!
Eğer tablodaki verileri ekrana bastırmak yerine bir diziye (array) kaydetmek istiyorsak aşağıdaki gibi yapabiliriz.
1
type kullanici struct {
2
id int
3
kullanici string
4
sifre string
5
tarih time.Time
6
}
7
tablo, _ := db.Query(`SELECT id, kullanici, sifre, tarih FROM kullanicilar`)
8
defer rows.Close()
9
var kullanicilar []kullanici
10
for tablo.Next() {
11
var k kullanici
12
err := tablo.Scan(&k.id, &k.kullanici, &k.sifre, &k.tarih)
13
kontrol(err)
14
kullanicilar = append(kullanicilar, k)
15
}
16
err := tablo.Err()
17
kontrol(err)
Copied!
Bu işlemin sonucunda kullanicilar dizimiz şu şekilde olacaktır.
1
kullanicilar {
2
kullanici {
3
id: 1,
4
kullanici: "ahmet",
5
sifre: "1234",
6
tarih: time.Time{wall: 0x0, ext: 63701044325, loc: (*time.Location)(nil)},
7
},
8
kullanici {
9
id: 2,
10
kullanici: "mehmet",
11
sifre: "5678",
12
tarih: time.Time{wall: 0x0, ext: 63701044622, loc: (*time.Location)(nil)},
13
},
14
}
Copied!
Tablodan Satır Silme
1
silineceksatir := 1
2
_, err := vt.Exec(`DELETE FROM kullanicilar WHERE id = ?`, silineceksatir)
3
kontrol(err)
Copied!
Gördüğünüz gibi basit bir şekilde MySQL paketi ile veritabanı yönetimi yapabiliyoruz. Hepsi Bir Arada
1
package main
2
import (
3
"database/sql"
4
"fmt"
5
"log"
6
"time"
7
_ "github.com/go-sql-driver/mysql"
8
)
9
func kontrol(err error) {
10
if err != nil {
11
log.Fatal(err)
12
}
13
}
14
func main() {
15
vt, err := sql.Open("mysql", "kullanici:[email protected](127.0.0.1:3306)/vtismi?parseTime=true")
16
if err := db.Ping(); err != nil {
17
kontrol(err)
18
}
19
{ // Yeni tablo oluştur
20
sorgu := `
21
CREATE TABLE kullanicilar (
22
id INT AUTO_INCREMENT,
23
kullanici TEXT NOT NULL,
24
sifre TEXT NOT NULL,
25
tarih DATETIME,
26
PRIMARY KEY (id)
27
);`
28
_, err := db.Exec(sorgu)
29
kontrol(err)
30
}
31
{ // Yeni kayıt ekle
32
kullanici := "kaan"
33
sifre := "1234"
34
tarih := time.Now()
35
sonuc, err := db.Exec(`INSERT INTO kullanicilar (kullanici, sifre, tarih) VALUES (?, ?, ?)`, username, password, createdAt)
36
kontrol(err)
37
eklenenid, err := sonuc.LastInsertId()
38
fmt.Println(eklenenid)
39
}
40
{ // İstenilen kaydı sorgulama
41
var (
42
id int
43
kullanici string
44
sifre string
45
tarih time.Time
46
sorguid int = 1
47
)
48
sorgu := "SELECT id, kullanici, sifre, tarih FROM kullanici WHERE id = ?"
49
err := vt.QueryRow(sorgu, sorguid).Scan(&id, &kullanici, &sifre, &tarih)
50
kontrol(err)
51
fmt.Println(id, kullanici, sifre, tarih)
52
}
53
{ // Tün kayıtları sorgula
54
type kullanici struct {
55
id int
56
kullanici string
57
sifre string
58
tarih time.Time
59
}
60
tablo, err := vt.Query(`SELECT id, kullanici, sifre, tarih FROM kullanicilar`)
61
kontrol(err)
62
defer tablo.Close()
63
var kullanicilar []kullanici
64
for tablo.Next() {
65
var k kullanici
66
err := tablo.Scan(&k.id, &k.kullanici, &k.sifre, &k.tarih)
67
kontrol(err)
68
kullanici = append(kullanicilar, k)
69
}
70
err := rows.Err()
71
kontrol(err)
72
fmt.Printf("%#v", kullanicilar)
73
}
74
//Kayıt Sil
75
{
76
silinecekid := 1
77
_, err := vt.Exec(`DELETE FROM kullanicilar WHERE id = ?`, silinecekid)
78
kontrol(err)
79
}
80
}
Copied!
Last modified 1yr ago
Copy link