Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
MySQL. Получение информации о таблице
Получить информацию о таблице позволяют следующие методы структуры sql.Rows
, объект которой возвращает метод Query()
:
Columns()
— позволяет получить слайс с названиями полей. Формат метода:
(*sql.Rows).Columns() ([]string, error)
Пример:
fmt.Println(rows.Columns()) // [id_rubr name_rubr] <nil>
ColumnTypes()
— позволяет получить слайс информацией о полях. Формат метода:
(*sql.Rows).ColumnTypes() ([]*sql.ColumnType, error)
Пример вывода названий полей:
arr, err := rows.ColumnTypes()
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
for _, v := range arr {
fmt.Println(v.Name())
}
Структура sql.ColumnType
содержит следующие методы:
Name()
— возвращает название поля или псевдоним. Формат метода:
(*sql.ColumnType).Name() string
DatabaseTypeName()
— возвращает тип данных поля. Формат метода:
(*sql.ColumnType).DatabaseTypeName() string
ScanType()
— возвращает тип данных Go, подходящий для сканирования с помощью методаScan()
. Формат метода:
(*sql.ColumnType).ScanType() reflect.Type
Nullable()
— через первое возвращаемое значение доступноtrue
, если поле может содержатьNULL
, иfalse
— в противном случае. Через второе возвращаемое значение доступноtrue
, если драйвер поддерживает это свойство, иfalse
— в противном случае. Формат метода:
(*sql.ColumnType).Nullable() (nullable bool, ok bool)
Length()
— через первое возвращаемое значение доступна длина поля переменной длины. Через второе возвращаемое значение доступноtrue
, если драйвер поддерживает это свойство, иfalse
— в противном случае. Формат метода:
(*sql.ColumnType).Length() (length int64, ok bool)
DecimalSize()
— через первое возвращаемое значение доступна точность, а через второе — масштаб десятичного типа. Через третье возвращаемое значение доступноtrue
, если драйвер поддерживает это свойство, иfalse
— в противном случае. Формат метода:
(*sql.ColumnType).DecimalSize() (precision int64,
scale int64, ok bool)
Пример получения информации о таблице site
приведен в листинге 16.9.
Листинг 16.9. Получение информации о таблице
package main
import (
"database/sql"
"fmt"
"os"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "root:@/godb")
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
defer db.Close()
rows, err := db.Query("SELECT * FROM `site`")
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
defer rows.Close()
fmt.Println(rows.Columns())
arr, err := rows.ColumnTypes()
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
for _, v := range arr {
fmt.Println(v.Name())
fmt.Println("---", v.DatabaseTypeName())
fmt.Println("---", v.ScanType())
fmt.Print("--- Nullable() ")
fmt.Println(v.Nullable())
fmt.Print("--- Length() ")
fmt.Println(v.Length())
fmt.Print("--- DecimalSize() ")
fmt.Println(v.DecimalSize())
}
}
Результат:
C:\book\packages>go run main.go
[id_site id_user id_rubr url title msg iq] <nil>
id_site
--- MEDIUMINT
--- int32
--- Nullable() false true
--- Length() 0 false
--- DecimalSize() 0 0 false
id_user
--- MEDIUMINT
--- sql.NullInt64
--- Nullable() true true
--- Length() 0 false
--- DecimalSize() 0 0 false
id_rubr
--- MEDIUMINT
--- sql.NullInt64
--- Nullable() true true
--- Length() 0 false
--- DecimalSize() 0 0 false
url
--- CHAR
--- sql.RawBytes
--- Nullable() true true
--- Length() 0 false
--- DecimalSize() 0 0 false
title
--- CHAR
--- sql.RawBytes
--- Nullable() true true
--- Length() 0 false
--- DecimalSize() 0 0 false
msg
--- TEXT
--- sql.RawBytes
--- Nullable() true true
--- Length() 0 false
--- DecimalSize() 0 0 false
iq
--- TINYINT
--- sql.NullInt64
--- Nullable() true true
--- Length() 0 false
--- DecimalSize() 0 0 false
Реквизиты
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов