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

Ошибка запроса в Go

Ошибку запроса нельзя откладывать только на конец цикла. Команда выполнения без курсора возвращает ошибку сразу, и ее проверяют до любых дальнейших шагов.

У выборки две точки проверки: сразу после открытия курсора и после обхода строк. Пропуск первой проверки оставит программу с nil курсором и паникой на Next.

Поймаем синтаксическую ошибку в тексте изменения:

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( `UPDTE goods SET price = ? WHERE id = ?`, 3.0, 1, ) if err != nil { fmt.Println("exec error") return } fmt.Println("ok") }

На экране "exec error". Опечатка в команде не дошла до выборки.

Ошибку открытия выборки тоже проверяют до цикла:

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) } rows, err := db.Query( `SELECT title, price FROM goodss`, ) if err != nil { fmt.Println("query error") return } 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) } }

Дан фрагмент: открыли выборку, ошибку не проверили, сразу пошли в цикл Next. Скажите, чем это опасно.

Запрос вставки вернул ошибку, но программа вызвала выборку всех строк. Скажите, что нужно сделать сразу после неудачной вставки.

Цикл Next завершился без ошибок на Scan. Скажите, зачем все равно вызывают проверку ошибки курсора после цикла.

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