Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpDbWh 207 of 280 menu
◀ ▶

Условие в запросе в Go

Условие в тексте запроса оставляет только подходящие строки. Число в сравнении не вшивают в строку на Go: его передают параметром, как при вставке.

После отбора результат читают тем же циклом по курсору. Если строк не нашлось, цикл просто не выполнится ни разу, это не ошибка.

Подготовим товары и выведем дорогие:

package main import ( "database/sql" "fmt" "log" "os" _ "modernc.org/sqlite" ) func main() { os.Remove("shop.db") db, err := sql.Open("sqlite", "shop.db") if err != nil { log.Fatal(err) } defer db.Close() err = db.Ping() if err != nil { log.Fatal(err) } _, err = db.Exec(` CREATE TABLE goods ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, price REAL NOT NULL ) `) if err != nil { log.Fatal(err) } _, err = db.Exec( `INSERT INTO goods (title, price) VALUES (?, ?)`, "pen", 2.0, ) if err != nil { log.Fatal(err) } _, err = db.Exec( `INSERT INTO goods (title, price) VALUES (?, ?)`, "book", 12.0, ) if err != nil { log.Fatal(err) } limit := 10.0 rows, err := db.Query( `SELECT title, price FROM goods WHERE price > ?`, limit, ) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var title string var price float64 err = rows.Scan(&title, &price) if err != nil { log.Fatal(err) } fmt.Println(title, price) } err = rows.Err() if err != nil { log.Fatal(err) } }

На экране одна строка "book" с ценой 12. Порог 10 попал в запрос параметром limit.

Условие по идентификатору работает так же:

package main import ( "database/sql" "fmt" "log" "os" _ "modernc.org/sqlite" ) func main() { os.Remove("shop.db") db, err := sql.Open("sqlite", "shop.db") if err != nil { log.Fatal(err) } defer db.Close() err = db.Ping() if err != nil { log.Fatal(err) } _, err = db.Exec(` CREATE TABLE orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, qty INTEGER NOT NULL, price REAL NOT NULL ) `) if err != nil { log.Fatal(err) } _, err = db.Exec( `INSERT INTO orders (title, qty, price) VALUES (?, ?, ?)`, "mug", 3, 9.5, ) if err != nil { log.Fatal(err) } wantID := 1 rows, err := db.Query( `SELECT title, qty FROM orders WHERE id = ?`, wantID, ) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var title string var qty int err = rows.Scan(&title, &qty) if err != nil { log.Fatal(err) } fmt.Println(title, qty) } err = rows.Err() if err != nil { log.Fatal(err) } }

Даны строки goods:

1 pen 2 2 book 12 3 mug 9

Скажите, сколько строк вернет условие price < 10 при параметре 10 и строгом сравнении в SQL.

Дан порог maxQty равный 5. Составьте текст выборки из orders с полями title и qty, где количество не больше параметра.

Скажите, будет ли ошибка, если условие ни одной строке не подошло и цикл не запустился.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить