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
package main
import (
"database/sql"
"errors"
"fmt"
)
func main() {
// buraya yaz
}Örnek çözüm
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
for rows.____() {
rows.Scan(&id)
}
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 |