GoDasturchi
Querying Multiple Rows

Querying Multiple Rows

Ko'p qatorni so'rash

Bir nechta qator qaytaradigan SELECT uchun db.Query ishlatiladi. Natija — *sql.Rows, uni for rows.Next() bilan qatorma-qator o'qiysiz ("Reading Files Line by Line" darsidagi bufio.Scannerga o'xshash naqsh).

example.go
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
	fmt.Println("xato:", err)
	return
}
defer rows.Close() // HAR DOIM yoping, aks holda ulanish "sizib qoladi"!

for rows.Next() {
	var id, age int64
	var name string
	if err := rows.Scan(&id, &name, &age); err != nil {
		fmt.Println("scan xatosi:", err)
		return
	}
	fmt.Println(id, name, age)
}

rows.Scan(&id, &name, &age) — joriy qatorning ustunlarini, aynan SELECT'dagi tartibda, berilgan o'zgaruvchilarga pointer orqali yozadi. defer rows.Close() — bu darsning eng muhim qoidasi: uni unutish, ulanishni butun sikl davomida band qilib qo'yadi ("connection leak"), va oxir-oqibat ulanishlar tugab qolishi mumkin.

>_ Exercise

Barcha foydalanuvchilarni o'qib chiqing.

  • db.Query bilan "SELECT id, name, age FROM users" ni bajaring
  • for rows.Next() bilan har bir qatorni Scan qiling
  • har birini "id name age" ko'rinishida chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

db.Query + rows.Next()/Scan() — ko'p qatorli natijalarni o'qishning standart naqshi; rows.Close()ni hech qachon unutmang.

NEXT UP

Querying a Single Row

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Querying Multiple Rows

Ko'p qatorni so'rash

Bir nechta qator qaytaradigan SELECT uchun db.Query ishlatiladi. Natija — *sql.Rows, uni for rows.Next() bilan qatorma-qator o'qiysiz ("Reading Files Line by Line" darsidagi bufio.Scannerga o'xshash naqsh).

example.go
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
	fmt.Println("xato:", err)
	return
}
defer rows.Close() // HAR DOIM yoping, aks holda ulanish "sizib qoladi"!

for rows.Next() {
	var id, age int64
	var name string
	if err := rows.Scan(&id, &name, &age); err != nil {
		fmt.Println("scan xatosi:", err)
		return
	}
	fmt.Println(id, name, age)
}

rows.Scan(&id, &name, &age) — joriy qatorning ustunlarini, aynan SELECT'dagi tartibda, berilgan o'zgaruvchilarga pointer orqali yozadi. defer rows.Close() — bu darsning eng muhim qoidasi: uni unutish, ulanishni butun sikl davomida band qilib qo'yadi ("connection leak"), va oxir-oqibat ulanishlar tugab qolishi mumkin.

>_ Exercise

Barcha foydalanuvchilarni o'qib chiqing.

  • db.Query bilan "SELECT id, name, age FROM users" ni bajaring
  • for rows.Next() bilan har bir qatorni Scan qiling
  • har birini "id name age" ko'rinishida chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

db.Query + rows.Next()/Scan() — ko'p qatorli natijalarni o'qishning standart naqshi; rows.Close()ni hech qachon unutmang.

NEXT UP

Querying a Single Row