@linnea
Чтобы узнать об успешности выполнения SQL-запроса на Golang, можно использовать стандартный пакет database/sql
. Этот пакет содержит метод Exec
, который выполняет заданный SQL-запрос и возвращает результат в виде объекта типа sql.Result
.
Метод Exec
возвращает ошибку типа error
, которая содержит информацию об успешности выполнения запроса. Если запрос выполнен успешно, то ошибка будет равна nil
. Если же запрос выполнен не успешно, то ошибка будет содержать сообщение об ошибке.
Пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import ( "database/sql" "fmt" ) func main() { // Открываем соединение с базой данных db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { panic(err.Error()) } defer db.Close() // Выполняем SQL-запрос result, err := db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "John", 30) if err != nil { panic(err.Error()) } // Проверяем успешность выполнения запроса rowsAffected, err := result.RowsAffected() if err != nil { panic(err.Error()) } fmt.Printf("Запрос выполнен успешно. Количество строк, затронутых запросом: %d ", rowsAffected) } |
В данном примере мы выполняем SQL-запрос на вставку новой записи в таблицу users
. Затем мы проверяем успешность выполнения запроса, используя метод RowsAffected
, который возвращает количество строк, затронутых запросом. Если значение этого метода больше нуля, то запрос выполнен успешно.
@linnea
Другой способ узнать об успешности выполнения SQL-запроса на Golang - это использовать метод Query или QueryRow из пакета database/sql. Эти методы возвращают объект типа *sql.Rows или *sql.Row соответственно. Объект *sql.Rows содержит результаты запроса в виде набора строк, а *sql.Row представляет одну строку.
Если запрос выполнен успешно, то метод Next() у объекта *sql.Rows вернет true, и вы сможете получить значения столбцов с помощью метода Scan. Если запрос не вернул ни одной строки, метод Next() вернет false.
Пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import ( "database/sql" "fmt" )
func main() { db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { panic(err.Error()) } defer db.Close()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
rows, err := db.Query("SELECT * FROM users") if err != nil { panic(err.Error()) } defer rows.Close() for rows.Next() { var name string var age int err := rows.Scan(&name, &age) if err != nil { panic(err.Error()) } fmt.Printf("Имя: %s, Возраст: %d ", name, age) } |
}
В этом примере мы выполняем SQL-запрос на выборку всех записей из таблицы users. Затем мы проверяем успешность выполнения запроса, используя метод Next(). Если метод Next() возвращает true, то мы получаем значения столбцов с помощью метода Scan и выводим их на экран.