Как узнать об успешности выполнения sql запроса на golang?

Пользователь

от linnea , в категории: Golang , 2 года назад

Как узнать об успешности выполнения sql запроса на golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от nicolette.stoltenberg , 2 года назад

@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, который возвращает количество строк, затронутых запросом. Если значение этого метода больше нуля, то запрос выполнен успешно.

Пользователь

от olen.shanahan , год назад

@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 и выводим их на экран.