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

Столбцы выборки в Go

В тексте SELECT перечисляют не все поля подряд, а только те, что нужны программе. Меньше данных тянется из файла, проще держать в голове порядок аргументов Scan.

Число переменных в Scan должно совпадать с числом столбцов в списке выборки. Имена столбцов в таблице могут быть другими, главное их порядок в запросе.

Выведем только названия товаров:

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) } rows, err := db.Query(`SELECT title FROM goods`) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var title string err = rows.Scan(&title) if err != nil { log.Fatal(err) } fmt.Println(title) } err = rows.Err() if err != nil { log.Fatal(err) } }

На экране "pen" и "book". Столбцы id и price в Scan не участвуют.

Можно взять пару полей из заказа:

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) } rows, err := db.Query( `SELECT qty, price FROM orders`, ) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var qty int var price float64 err = rows.Scan(&qty, &price) if err != nil { log.Fatal(err) } fmt.Println(qty, price) } err = rows.Err() if err != nil { log.Fatal(err) } }

Дана таблица goods с тремя столбцами. Составьте текст выборки, который вернет только id и price.

В SELECT указаны title, затем price, а в Scan сначала float64, потом string. Скажите, что пойдет не так.

Даны строки:

orders: id=1 title="mug" qty=3 price=9.5

Напишите цикл, который печатает только title, не читая id.

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