CodeBlanks Logo Icon CodeBlanks

Query ve Exec

  • Go kursu
  • İleri seviye
  • Ders 27/68
  • 4 dk

Query ile satır okumayı, Exec ile değişiklik yapmayı öğrenirsin.

Query ve Exec

Satır döndüren sorgular (SELECT) için Query ya da tek satır için QueryRow; satır döndürmeyenler (INSERT, UPDATE, DELETE) için Exec kullanılır.

rows, err := db.Query("SELECT id, ad FROM urunler")
if err != nil { return err }
defer rows.Close()
for rows.Next() {
    var id int
    var ad string
    if err := rows.Scan(&id, &ad); err != nil { return err }
}
return rows.Err()

Exec sonucu

Exec bir sql.Result döndürür. RowsAffected() kaç satırın değiştiğini, LastInsertId() (destekleyen sürücülerde) eklenen satırın kimliğini verir:

res, err := db.Exec("UPDATE urunler SET stok = stok - 1 WHERE id = ?", 7)
n, _ := res.RowsAffected()
fmt.Println(n, "satır güncellendi")

Tek satır için db.QueryRow(...).Scan(&x) kısa yoldur; satır yoksa sql.ErrNoRows döner.

Uygulama Satır yok kontrolü

errors.Is ile sql.ErrNoRows kontrolünü dene: err := sql.ErrNoRows tanımla ve errors.Is(err, sql.ErrNoRows) sonucunu yazdır.

Başlangıç kodu

main.go
package main

import (
    "database/sql"
    "errors"
    "fmt"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "database/sql"
    "errors"
    "fmt"
)

func main() {
    err := sql.ErrNoRows
    fmt.Println(errors.Is(err, sql.ErrNoRows))
}

Beklenen çıktı

true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>rows.Close()</code> unutulursa ne olur?

  • Sorgu iki kez çalışır
  • Hiçbir etkisi yoktur
  • Veriler silinir
  • Bağlantı havuza dönmez, havuz tükenebilir Doğru cevap

Açıklama: Açık Rows bağlantıyı tutar; döngü sonuna kadar gitmezsen veya Close etmezsen bağlantılar sızar.

2 Satırları oku

Soru
for rows.____() {
    rows.Scan(&id)
}
Cevap
for rows.Next() {
    rows.Scan(&id)
}

Açıklama: rows.Next bir sonraki satıra geçer; satır kalmayınca false döner.

3 Hangi yöntem?

Kavram Anlamı
SELECT birçok satır Query
SELECT tek satır QueryRow
INSERT / UPDATE Exec
Satır yok hatası sql.ErrNoRows

İleri seviye bölümündeki tüm dersler