概述
Golang使用UXDB数据库,需要使用uxdb-golang模块来连接,Linux平台也可以使用该模块进行连接。
1. 安装Golang
官网下载安装Golang:https://golang.google.cn/ Golang版本要求:Go >= 1.10
官网提供多种平台的安装包,根据实际情况进行下载。
-
Windows
a. 下载对应Windows环境的安装包,后缀名为.msi。
b. 双击运行,直接进行下一步,注意GOROOT为GO语言的主目录,GOPATH为工作目录。
c. 默认安装go语言完成后,会自动添加环境变量,若自主修改了GOROOT与GOPATH目录路径,则需要修改环境变量。
d. 完成后可在CMD命令行运行go version来查看版本号信息。
-
Linux
a. 下载对应Linux环境的安装包,后缀名为.tar.gz。
b. 执行tar命令解压安装包至/usr/local目录下(官方推荐目录)。
c. 添加/usr/local/go/bin目录到path变量中,在/etc/profile文件最后一行添加:
export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin保存后,执行如下命令:
source /etc/profiled. 安装完成之后执行go version,如果出现版本号信息,则Go环境安装成功。
2. 创建环境并连接数据库
a. 在GOPATH工作目录下创建工程文件夹。如:GOPATH目录为E:\go,在E:\go目录下创建一个工程文件夹,如:uxdb_test
b. 在工程文件夹uxdb_test下创建test.go文件,内容如下:
连接UXDB oracle模式数据库,数据库名(dbname)和用户(user)需要大写。
package main
import (
"database/sql"
"fmt"
_ "uxdb-golang" //_操作其实只是引入该包。当导入一个包时,它所有的init()函数就会被执行,但有些时候并非真的需要使用这些包,仅仅是希望它的init()函数被执行而已。这个时候就可以使用_操作引用该包
)
var db *sql.DB
var err error //定义全局变量
func sqlOpen() {
db, err = sql.Open("uxdb", "host=192.168.168.128 port=5432 user=uxdb password=****** dbname=uxdb sslmode=disable")
//driverName是数据库驱动类型名称,uxdb的go语言驱动名称为uxdb;
//port是数据库的端口号,默认是5432;
//user是数据库的登录帐号;
//dbname是数据库名称;
//sslmode是安全验证模式,disable为不使用ssl加密方式连接;
if err != nil {
fmt.Println("连接数据库错误:" + err.Error())
} else {
fmt.Println("数据库连接成功")
}
err = db.Ping() //Ping检查与数据库的连接是否有效,如果失效返回error信息
if err != nil {
fmt.Println("DBPing错误:" + err.Error())
} else
{
fmt.Println("DBPingSuccess")
}
}
func sqlcreate() {
fmt.Println("*****开始创建表*****")
createsql := "create table Student(Sno int,Sname char(10),Sage int,Ssex char(10));"
stmt, err := db.Prepare(createsql)
if err != nil {
fmt.Print(err.Error())
} else {
fmt.Println("create table successfully")
}
stmt.Exec()
}
func sqlInsert() {
//插入数据
fmt.Println("+++++开始进行数据库插入+++++")
stmt, err := db.Prepare("INSERT INTO student(sno,sname,sage,ssex) VALUES($1,$2,$3,$4) ")
checkErr(err)
res, err := stmt.Exec("1", "mary", "22", "女")
checkErr(err)
affect, err := res.RowsAffected() //RowsAffected返回被update、insert或delete命令影响的行数
checkErr(err)
fmt.Println("受影响的行:", affect)
}
func sqlInsert1() {
//插入数据
fmt.Println("+++++开始进行数据库插入+++++")
stmt, err := db.Prepare("INSERT INTO student(sno,sname,sage,ssex) VALUES($1,$2,$3,$4) ")
checkErr(err)
res, err := stmt.Exec("2", "jack", "23", "男")
checkErr(err)
affect, err := res.RowsAffected() //RowsAffected返回被update、insert或delete命令影响的行数
checkErr(err)
fmt.Println("受影响的行:", affect)
}
func sqlDelete() {
//删除数据
fmt.Println("=====开始删除数据=====")
stmt, err := db.Prepare("delete from student where sno=$1")
checkErr(err)
res, err := stmt.Exec(1)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("受影响的行:", affect)
}
func sqlSelect() {
//查询数据
fmt.Println("*****开始进行数据库查询*****")
rows, err := db.Query("SELECT * FROM student")
checkErr(err)
for rows.Next() {
var sno int
var sname string
var sage int
var ssex string
err = rows.Scan(&sno, &sname, &sage, &ssex)
checkErr(err)
fmt.Println("sno = ", sno, "\nsname = ", sname, "\nsage = ", sage, "\nssex = ", ssex, "\n-----------")
}
}
func sqlUpdate() {
//更新数据
fmt.Println("#####开始进行数据更新#####")
stmt, err := db.Prepare("update student set sname=$1 where sno=$2")
checkErr(err)
res, err := stmt.Exec("uxsino", 1)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("受影响的行:", affect)
}
func sqlClose() {
//关闭数据库
db.Close()
}
func checkErr(err error) {
//定义异常排查函数
if err != nil {
panic(err)
}
}
func sqlTest() {
//创建测试函数,调用增删改查函数进行数据库操作
sep := "----------\n"
sqlInsert()
sqlInsert1()
sqlSelect()
sqlUpdate()
sqlSelect()
sqlDelete()
sqlSelect()
sqlClose()
println(sep, "数据库已关闭")
}
func main() {
//运行打开数据库函数
sqlOpen()
//运行创建表函数
sqlcreate()
//运行增删改查测试函数
sqlTest()
}
c. 将GO语言数据库驱动uxdb-golang分别放在test.go的同级目录和GOROOT的src目录下。
GOROOT目录:windows一般在C:\Go\src目录下;Linux一般在/usr/local/go/src目录下。根据实际安装golang时的环境变量而定。
d. 运行结果
-
Windows:打开cmd窗口,进入test.go所在的目录,执行命令go run test.go运行。
-
Linux:打开终端,进入test.go所在的目录,执行命令go run test.go运行。
E:\go\uxdb_test>go run test.go
数据库连接成功
DB Ping Success
***** 开始创建表 *****
create table successfully
+++++ 开始进行数据库插入 +++++
受影响的行:1
+++++ 开始进行数据库插入 +++++
受影响的行:1
***** 开始进行数据库查询 *****
sno: 1
sname: mary
sage: 22
ssex: 女
sno: 2
sname: jack
sage: 23
ssex: 男
##### 开始进行数据更新 #####
受影响的行:1
***** 开始进行数据库查询 *****
sno: 2
sname: jack
sage: 23
ssex: 男
sno: 1
sname: uxsino
sage: 22
ssex: 女
==== 开始删除数据 ====
受影响的行:1
***** 开始进行数据库查询 *****
sno: 2
sname: jack
sage: 23
ssex: 男
数据库已关闭
3.接口介绍
3.1.包级函数
3.1.1.sql.Drivers
-
功能
列出当前已注册的所有驱动名(UXDB 驱动注册名为 uxdb)
-
函数
func Drivers() []string -
参数:无。
-
返回值
返回当前已注册驱动名称的字符串切片。
3.1.2.sql.Register
-
功能
向 database/sql 注册一个驱动实现
-
函数
func Register(name string, driver driver.Driver) -
参数
表 Register 参数说明
名称 描述 name(输入) 驱动名称。 driver(输入) 驱动实现。 -
返回值
无返回值。
3.1.3.sql.Open
-
功能
按驱动名与连接串创建数据库句柄(惰性连接,不实际建连)
-
函数
func Open(driverName, dataSourceName string) (*DB, error);用法 sql.Open("uxdb", "host=... port=... user=... password=... dbname=... sslmode=disable") -
参数
表 Open 参数说明
名称 描述 driverName(输入) 驱动名称,如 uxdb。 dataSourceName(输入) 数据源名称(连接串),如 host=... port=... user=... password=... dbname=... sslmode=disable。 -
返回值
返回数据库句柄指针 *DB 和错误信息 error。
3.1.4.sql.OpenDB
-
功能
用自定义 Connector 创建数据库句柄
-
函数
func OpenDB(c driver.Connector) *DB -
参数
表 OpenDB 参数说明
名称 描述 c(输入) 自定义的连接器 Connector。 -
返回值
返回数据库句柄指针 *DB。
3.1.5.sql.Named
-
功能
构造带名字的查询参数
-
函数
func Named(name string, value any) NamedArg -
参数
表 Named 参数说明
名称 描述 name(输入) 参数名。 value(输入) 参数值。 -
返回值
返回带名字的查询参数 NamedArg。
3.2.包级变量
3.2.1.sql.ErrConnDone
-
功能
连接已被关闭时返回的错误
-
函数
var ErrConnDone = errors.New("sql: connection is already closed") -
参数:无。
-
返回值
该变量为 error 错误对象,表示连接已被关闭。
3.2.2.sql.ErrNoRows
-
功能
QueryRow 未查询到任何行时返回的错误
-
函数
var ErrNoRows = errors.New("sql: no rows in result set") -
参数:无。
-
返回值
该变量为 error 错误对象,表示 QueryRow 未查询到任何行。
3.2.3.sql.ErrTxDone
-
功能
事务已提交或回滚后继续操作返回的错误
-
函数
var ErrTxDone = errors.New("sql: transaction has already been committed or rolled back") -
参数:无。
-
返回值
该变量为 error 错误对象,表示事务已提交或回滚。
3.3.sql.DB(连接池句柄)
3.3.1.DB.Begin
-
功能
开启一个事务
-
函数
Begin() (*Tx, error) -
参数:无。
-
返回值
返回事务对象 *Tx 和错误信息 error。
3.3.2.DB.BeginTx
-
功能
按指定隔离级别与只读属性开启事务
-
函数
BeginTx(ctx, opts *TxOptions) (*Tx, error) -
参数
表 BeginTx 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 opts(输入) 事务选项 TxOptions,指定隔离级别与只读属性。 -
返回值
返回事务对象 *Tx 和错误信息 error。
3.3.3.DB.Close
-
功能
关闭数据库句柄并释放连接池中的连接
-
函数
Close() error -
参数:无。
-
返回值
返回错误信息 error。
3.3.4.DB.Conn
-
功能
从连接池中独占取出一条连接
-
函数
Conn(ctx) (*Conn, error) -
参数
表 Conn 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 -
返回值
返回独占连接 *Conn 和错误信息 error。
3.3.5.DB.Driver
-
功能
返回底层驱动实现
-
函数
Driver() driver.Driver -
参数:无。
-
返回值
返回底层驱动实现 driver.Driver。
3.3.6.DB.Exec
-
功能
执行不返回结果集的语句(INSERT/UPDATE/DELETE/DDL)
-
函数
Exec(query string, args ...any) (Result, error) -
参数
表 Exec 参数说明
名称 描述 query(输入) SQL 语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回执行结果 Result 和错误信息 error。
3.3.7.DB.ExecContext
-
功能
带 context 的 Exec,可取消与超时
-
函数
ExecContext(ctx, query string, args ...any) (Result, error) -
参数
表 ExecContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回执行结果 Result 和错误信息 error。
3.3.8.DB.Ping
-
功能
检测数据库连通性
-
函数
Ping() error -
参数:无。
-
返回值
返回错误信息 error。
3.3.9.DB.PingContext
-
功能
带 context 的连通性检测
-
函数
PingContext(ctx) error -
参数
表 PingContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 -
返回值
返回错误信息 error。
3.3.10.DB.Prepare
-
功能
预处理一条语句,返回可重复使用的 Stmt
-
函数
Prepare(query string) (*Stmt, error) -
参数
表 Prepare 参数说明
名称 描述 query(输入) SQL 语句。 -
返回值
返回预处理语句 *Stmt 和错误信息 error。
3.3.11.DB.PrepareContext
-
功能
带 context 的语句预处理
-
函数
PrepareContext(ctx, query string) (*Stmt, error) -
参数
表 PrepareContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 语句。 -
返回值
返回预处理语句 *Stmt 和错误信息 error。
3.3.12.DB.Query
-
功能
执行查询并返回多行结果集
-
函数
Query(query string, args ...any) (*Rows, error) -
参数
表 Query 参数说明
名称 描述 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回结果集 *Rows 和错误信息 error。
3.3.13.DB.QueryContext
-
功能
带 context 的查询执行
-
函数
QueryContext(ctx, query string, args ...any) (*Rows, error) -
参数
表 QueryContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回结果集 *Rows 和错误信息 error。
3.3.14.DB.QueryRow
-
功能
执行查询并返回单行结果
-
函数
QueryRow(query string, args ...any) *Row -
参数
表 QueryRow 参数说明
名称 描述 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回单行结果 *Row。
3.3.15.DB.QueryRowContext
-
功能
带 context 的单行查询
-
函数
QueryRowContext(ctx, query string, args ...any) *Row -
参数
表 QueryRowContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回单行结果 *Row。
3.3.16.DB.SetConnMaxIdleTime
-
功能
设置连接在池中最大空闲时长
-
函数
SetConnMaxIdleTime(d time.Duration) -
参数
表 SetConnMaxIdleTime 参数说明
名称 描述 d(输入) 连接在池中允许空闲的最大时长。 -
返回值
无返回值。
3.3.17.DB.SetConnMaxLifetime
-
功能
设置连接的最大存活时长
-
函数
SetConnMaxLifetime(d time.Duration) -
参数
表 SetConnMaxLifetime 参数说明
名称 描述 d(输入) 连接允许存活的最大时长。 -
返回值
无返回值。
3.3.18.DB.SetMaxIdleConns
-
功能
设置空闲连接数的上限
-
函数
SetMaxIdleConns(n int) -
参数
表 SetMaxIdleConns 参数说明
名称 描述 n(输入) 空闲连接数的上限。 -
返回值
无返回值。
3.3.19.DB.SetMaxOpenConns
-
功能
设置打开连接数的上限
-
函数
SetMaxOpenConns(n int) -
参数
表 SetMaxOpenConns 参数说明
名称 描述 n(输入) 打开连接数的上限。 -
返回值
无返回值。
3.3.20.DB.Stats
-
功能
返回连接池运行统计
-
函数
Stats() DBStats -
参数:无。
-
返回值
返回连接池运行统计 DBStats。
3.4.sql.Conn(独占连接)
3.4.1.Conn.BeginTx
-
功能
在该连接上开启事务
-
函数
BeginTx(ctx, opts *TxOptions) (*Tx, error) -
参数
表 BeginTx 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 opts(输入) 事务选项 TxOptions,指定隔离级别与只读属性。 -
返回值
返回事务对象 *Tx 和错误信息 error。
3.4.2.Conn.Close
-
功能
把连接归还连接池
-
函数
Close() error -
参数:无。
-
返回值
返回错误信息 error。
3.4.3.Conn.ExecContext
-
功能
在该连接上执行语句
-
函数
ExecContext(ctx, query string, args ...any) (Result, error) -
参数
表 ExecContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回执行结果 Result 和错误信息 error。
3.4.4.Conn.PingContext
-
功能
在该连接上检测连通性
-
函数
PingContext(ctx) error -
参数
表 PingContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 -
返回值
返回错误信息 error。
3.4.5.Conn.PrepareContext
-
功能
在该连接上预处理语句
-
函数
PrepareContext(ctx, query string) (*Stmt, error) -
参数
表 PrepareContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 语句。 -
返回值
返回预处理语句 *Stmt 和错误信息 error。
3.4.6.Conn.QueryContext
-
功能
在该连接上执行查询
-
函数
QueryContext(ctx, query string, args ...any) (*Rows, error) -
参数
表 QueryContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回结果集 *Rows 和错误信息 error。
3.4.7.Conn.QueryRowContext
-
功能
在该连接上执行单行查询
-
函数
QueryRowContext(ctx, query string, args ...any) *Row -
参数
表 QueryRowContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回单行结果 *Row。
3.4.8.Conn.Raw
-
功能
直接操作底层驱动连接(driver.Conn)
-
函数
Raw(f func(driverConn any) error) error -
参数
表 Raw 参数说明
名称 描述 f(输入) 回调函数,其参数为底层驱动连接 driverConn。 -
返回值
返回错误信息 error。
3.5.sql.Stmt(预处理语句)
3.5.1.Stmt.Close
-
功能
关闭预处理语句并释放服务端资源
-
函数
Close() error -
参数:无。
-
返回值
返回错误信息 error。
3.5.2.Stmt.Exec
-
功能
执行预处理语句(非查询)
-
函数
Exec(args ...any) (Result, error) -
参数
表 Exec 参数说明
名称 描述 args(输入) SQL 参数值,可变参数。 -
返回值
返回执行结果 Result 和错误信息 error。
3.5.3.Stmt.ExecContext
-
功能
带 context 执行预处理语句
-
函数
ExecContext(ctx, args ...any) (Result, error) -
参数
表 ExecContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 args(输入) SQL 参数值,可变参数。 -
返回值
返回执行结果 Result 和错误信息 error。
3.5.4.Stmt.Query
-
功能
执行预处理语句并返回结果集
-
函数
Query(args ...any) (*Rows, error) -
参数
表 Query 参数说明
名称 描述 args(输入) SQL 参数值,可变参数。 -
返回值
返回结果集 *Rows 和错误信息 error。
3.5.5.Stmt.QueryContext
-
功能
带 context 执行预处理查询
-
函数
QueryContext(ctx, args ...any) (*Rows, error) -
参数
表 QueryContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 args(输入) SQL 参数值,可变参数。 -
返回值
返回结果集 *Rows 和错误信息 error。
3.5.6.Stmt.QueryRow
-
功能
执行预处理语句并返回单行
-
函数
QueryRow(args ...any) *Row -
参数
表 QueryRow 参数说明
名称 描述 args(输入) SQL 参数值,可变参数。 -
返回值
返回单行结果 *Row。
3.5.7.Stmt.QueryRowContext
-
功能
带 context 的预处理单行查询
-
函数
QueryRowContext(ctx, args ...any) *Row -
参数
表 QueryRowContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 args(输入) SQL 参数值,可变参数。 -
返回值
返回单行结果 *Row。
3.6.sql.Tx(事务)
3.6.1.Tx.Commit
-
功能
提交事务
-
函数
Commit() error -
参数:无。
-
返回值
返回错误信息 error。
3.6.2.Tx.Rollback
-
功能
回滚事务
-
函数
Rollback() error -
参数:无。
-
返回值
返回错误信息 error。
3.6.3.Tx.Exec
-
功能
在事务中执行语句
-
函数
Exec(query string, args ...any) (Result, error) -
参数
表 Exec 参数说明
名称 描述 query(输入) SQL 语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回执行结果 Result 和错误信息 error。
3.6.4.Tx.ExecContext
-
功能
在事务中带 context 执行语句
-
函数
ExecContext(ctx, query string, args ...any) (Result, error) -
参数
表 ExecContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回执行结果 Result 和错误信息 error。
3.6.5.Tx.Prepare
-
功能
在事务中预处理语句
-
函数
Prepare(query string) (*Stmt, error) -
参数
表 Prepare 参数说明
名称 描述 query(输入) SQL 语句。 -
返回值
返回预处理语句 *Stmt 和错误信息 error。
3.6.6.Tx.PrepareContext
-
功能
在事务中带 context 预处理语句
-
函数
PrepareContext(ctx, query string) (*Stmt, error) -
参数
表 PrepareContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 语句。 -
返回值
返回预处理语句 *Stmt 和错误信息 error。
3.6.7.Tx.Query
-
功能
在事务中执行查询
-
函数
Query(query string, args ...any) (*Rows, error) -
参数
表 Query 参数说明
名称 描述 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回结果集 *Rows 和错误信息 error。
3.6.8.Tx.QueryContext
-
功能
在事务中带 context 执行查询
-
函数
QueryContext(ctx, query string, args ...any) (*Rows, error) -
参数
表 QueryContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回结果集 *Rows 和错误信息 error。
3.6.9.Tx.QueryRow
-
功能
在事务中执行单行查询
-
函数
QueryRow(query string, args ...any) *Row -
参数
表 QueryRow 参数说明
名称 描述 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回单行结果 *Row。
3.6.10.Tx.QueryRowContext
-
功能
在事务中带 context 执行单行查询
-
函数
QueryRowContext(ctx, query string, args ...any) *Row -
参数
表 QueryRowContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 query(输入) SQL 查询语句。 args(输入) SQL 参数值,可变参数。 -
返回值
返回单行结果 *Row。
3.6.11.Tx.Stmt
-
功能
把一条已预处理的语句绑定到本事务
-
函数
Stmt(stmt *Stmt) *Stmt -
参数
表 Stmt 参数说明
名称 描述 stmt(输入) 已预处理的语句 Stmt。 -
返回值
返回绑定到本事务的预处理语句 *Stmt。
3.6.12.Tx.StmtContext
-
功能
带 context 地把预处理语句绑定到本事务
-
函数
StmtContext(ctx, stmt *Stmt) *Stmt -
参数
表 StmtContext 参数说明
名称 描述 ctx(输入) 上下文 context.Context,用于控制超时与取消。 stmt(输入) 已预处理的语句 Stmt。 -
返回值
返回绑定到本事务的预处理语句 *Stmt。
3.7.sql.Rows(结果集)
3.7.1.Rows.Close
-
功能
关闭结果集,释放连接
-
函数
Close() error -
参数:无。
-
返回值
返回错误信息 error。
3.7.2.Rows.ColumnTypes
-
功能
返回各列的数据库类型元信息
-
函数
ColumnTypes() ([]*ColumnType, error) -
参数:无。
-
返回值
返回列类型信息切片 []*ColumnType 和错误信息 error。
3.7.3.Rows.Columns
-
功能
返回结果集的列名清单
-
函数
Columns() ([]string, error) -
参数:无。
-
返回值
返回列名字符串切片 []string 和错误信息 error。
3.7.4.Rows.Err
-
功能
返回遍历过程中发生的错误
-
函数
Err() error -
参数:无。
-
返回值
返回遍历过程中发生的错误信息 error。
3.7.5.Rows.Next
-
功能
移动到下一行,返回是否还有数据
-
函数
Next() bool -
参数:无。
-
返回值
返回布尔值 bool,表示是否还有下一行数据。
3.7.6.Rows.NextResultSet
-
功能
移动到下一个结果集
-
函数
NextResultSet() bool -
参数:无。
-
返回值
返回布尔值 bool,表示是否还有下一个结果集。
3.7.7.Rows.Scan
-
功能
把当前行各列的值扫描到目标变量
-
函数
Scan(dest ...any) error -
参数
表 Scan 参数说明
名称 描述 dest(输出) 目标变量指针列表,按列顺序接收当前行的值。 -
返回值
返回错误信息 error。
3.8.sql.Row(单行结果)
3.8.1.Row.Err
-
功能
返回查询过程中发生的错误
-
函数
Err() error -
参数:无。
-
返回值
返回查询过程中发生的错误信息 error。
3.8.2.Row.Scan
-
功能
把单行结果扫描到目标变量
-
函数
Scan(dest ...any) error -
参数
表 Scan 参数说明
名称 描述 dest(输出) 目标变量指针列表,按列顺序接收结果值。 -
返回值
返回错误信息 error。
3.9.sql.ColumnType(列元信息)
3.9.1.ColumnType.DatabaseTypeName
-
功能
返回列的数据库原生类型名
-
函数
DatabaseTypeName() string -
参数:无。
-
返回值
返回列的数据库原生类型名字符串。
3.9.2.ColumnType.DecimalSize
-
功能
返回列的精度与小数位数
-
函数
DecimalSize() (precision, scale int64, ok bool) -
参数:无。
-
返回值
返回精度 precision、小数位数 scale 以及是否有效 ok。
3.9.3.ColumnType.Length
-
功能
返回列的定义长度
-
函数
Length() (length int64, ok bool) -
参数:无。
-
返回值
返回列的定义长度 length 以及是否有效 ok。
3.9.4.ColumnType.Name
-
功能
返回列名
-
函数
Name() string -
参数:无。
-
返回值
返回列名字符串。
3.10.sql.Result(执行结果)
3.10.1.Result.LastInsertId
-
功能
返回最后插入记录的自增 ID
-
函数
LastInsertId() (int64, error) -
参数:无。
-
返回值
返回最后插入记录的自增 ID 和错误信息 error。
3.10.2.Result.RowsAffected
-
功能
返回受影响的行数
-
函数
RowsAffected() (int64, error) -
参数:无。
-
返回值
返回受影响的行数和错误信息 error。
3.11.sql.Scanner(扫描接口)
3.11.1.Scanner.Scan
-
功能
把数据库列值转换并写入自定义类型
-
函数
Scan(src any) error -
参数
表 Scan 参数说明
名称 描述 src(输入) 数据库返回的列值。 -
返回值
返回错误信息 error。
3.12.其它类型·连接池统计
3.12.1.DBStats.MaxOpenConnections
-
功能
打开连接数的上限
-
函数
MaxOpenConnections int -
参数:无。
-
返回值
该字段为 int 类型,表示打开连接数的上限。
3.12.2.DBStats.OpenConnections
-
功能
当前已打开的连接数
-
函数
OpenConnections int -
参数:无。
-
返回值
该字段为 int 类型,表示当前已打开的连接数。
3.12.3.DBStats.InUse
-
功能
正在被使用的连接数
-
函数
InUse int -
参数:无。
-
返回值
该字段为 int 类型,表示正在被使用的连接数。
3.12.4.DBStats.Idle
-
功能
空闲连接数
-
函数
Idle int -
参数:无。
-
返回值
该字段为 int 类型,表示空闲连接数。
3.12.5.DBStats.WaitCount
-
功能
等待连接的累计次数
-
函数
WaitCount int64 -
参数:无。
-
返回值
该字段为 int64 类型,表示等待连接的累计次数。
3.12.6.DBStats.WaitDuration
-
功能
等待连接的总时长
-
函数
WaitDuration time.Duration -
参数:无。
-
返回值
该字段为 time.Duration 类型,表示等待连接的总时长。
3.12.7.DBStats.MaxIdleClosed
-
功能
因超过空闲上限而被关闭的连接数
-
函数
MaxIdleClosed int64 -
参数:无。
-
返回值
该字段为 int64 类型,表示因超过空闲上限而被关闭的连接数。
3.12.8.DBStats.MaxLifetimeClosed
-
功能
因超过存活时长而被关闭的连接数
-
函数
MaxLifetimeClosed int64 -
参数:无。
-
返回值
该字段为 int64 类型,表示因超过存活时长而被关闭的连接数。
3.13.其它类型·事务隔离级别
3.13.1.IsolationLevel.LevelDefault
-
功能
使用数据库默认隔离级别
-
函数
LevelDefault IsolationLevel = iota -
参数:无。
-
返回值
该常量为 IsolationLevel 类型,表示使用数据库默认隔离级别。
3.13.2.IsolationLevel.LevelReadUncommitted
-
功能
读未提交
-
函数
LevelReadUncommitted -
参数:无。
-
返回值
该常量为 IsolationLevel 类型,表示读未提交隔离级别。
3.13.3.IsolationLevel.LevelReadCommitted
-
功能
读已提交
-
函数
LevelReadCommitted -
参数:无。
-
返回值
该常量为 IsolationLevel 类型,表示读已提交隔离级别。
3.13.4.IsolationLevel.LevelWriteCommitted
-
功能
写已提交
-
函数
LevelWriteCommitted -
参数:无。
-
返回值
该常量为 IsolationLevel 类型,表示写已提交隔离级别。
3.13.5.IsolationLevel.LevelRepeatableRead
-
功能
可重复读
-
函数
LevelRepeatableRead -
参数:无。
-
返回值
该常量为 IsolationLevel 类型,表示可重复读隔离级别。
3.13.6.IsolationLevel.LevelSnapshot
-
功能
快照隔离
-
函数
LevelSnapshot -
参数:无。
-
返回值
该常量为 IsolationLevel 类型,表示快照隔离级别。
3.13.7.IsolationLevel.LevelSerializable
-
功能
可串行化
-
函数
LevelSerializable -
参数:无。
-
返回值
该常量为 IsolationLevel 类型,表示可串行化隔离级别。
3.13.8.IsolationLevel.LevelLinearizable
-
功能
线性一致
-
函数
LevelLinearizable -
参数:无。
-
返回值
该常量为 IsolationLevel 类型,表示线性一致隔离级别。
3.14.其它类型·事务选项
3.14.1.TxOptions.Isolation
-
功能
事务隔离级别
-
函数
Isolation IsolationLevel -
参数:无。
-
返回值
该字段为 IsolationLevel 类型,表示事务隔离级别。
3.14.2.TxOptions.ReadOnly
-
功能
是否开启只读事务
-
函数
ReadOnly bool -
参数:无。
-
返回值
该字段为 bool 类型,表示是否开启只读事务。
3.15.其它类型·命名参数
3.15.1.NamedArg.Name
-
功能
参数名
-
函数
Name string -
参数:无。
-
返回值
该字段为 string 类型,表示参数名。
3.15.2.NamedArg.Value
-
功能
参数值
-
函数
Value any -
参数:无。
-
返回值
该字段为 any 类型,表示参数值。
3.16.其它类型·可空类型
3.16.1.Null[T].V
-
功能
实际值(泛型可空类型,Go 1.22+)
-
函数
V T -
参数:无。
-
返回值
该字段为泛型 T 类型,表示可空类型的实际值。
3.16.2.Null[T].Valid
-
功能
值是否有效(非 NULL)
-
函数
Valid bool -
参数:无。
-
返回值
该字段为 bool 类型,表示值是否有效(非 NULL)。
3.16.3.NullString.String
-
功能
字符串值
-
函数
String string -
参数:无。
-
返回值
该字段为 string 类型,表示字符串值。
3.16.4.NullString.Valid
-
功能
值是否有效(非 NULL)
-
函数
Valid bool -
参数:无。
-
返回值
该字段为 bool 类型,表示值是否有效(非 NULL)。
3.16.5.NullBool.Bool / Valid
-
功能
布尔值与有效性标记
-
函数
Bool bool / Valid bool -
参数:无。
-
返回值
该字段组为 bool 类型,表示布尔值与有效性标记。
3.16.6.NullByte.Byte / Valid
-
功能
字节值与有效性标记
-
函数
Byte byte / Valid bool -
参数:无。
-
返回值
该字段组为 byte 类型,表示字节值与有效性标记。
3.16.7.NullFloat64.Float64 / Valid
-
功能
浮点值与有效性标记
-
函数
Float64 float64 / Valid bool -
参数:无。
-
返回值
该字段组为 float64 类型,表示浮点值与有效性标记。
3.16.8.NullInt16.Int16 / Valid
-
功能
16 位整数值与有效性标记
-
函数
Int16 int16 / Valid bool -
参数:无。
-
返回值
该字段组为 int16 类型,表示 16 位整数值与有效性标记。
3.16.9.NullInt32.Int32 / Valid
-
功能
32 位整数值与有效性标记
-
函数
Int32 int32 / Valid bool -
参数:无。
-
返回值
该字段组为 int32 类型,表示 32 位整数值与有效性标记。
3.16.10.NullInt64.Int64 / Valid
-
功能
64 位整数值与有效性标记
-
函数
Int64 int64 / Valid bool -
参数:无。
-
返回值
该字段组为 int64 类型,表示 64 位整数值与有效性标记。
3.16.11.NullTime.Time / Valid
-
功能
时间值与有效性标记
-
函数
Time time.Time / Valid bool -
参数:无。
-
返回值
该字段组为 time.Time 类型,表示时间值与有效性标记。
3.16.12.Out
-
功能
标记输出参数(driver.Out 别名,空结构体)
-
函数
type Out struct{} -
参数:无。
-
返回值
该类型为输出参数标记(driver.Out 别名,空结构体)。
3.16.13.RawBytes
-
功能
原始字节切片别名,用于直接取回未解析的列值
-
函数
type RawBytes []byte -
参数:无。
-
返回值
该类型为原始字节切片别名,用于直接取回未解析的列值。
3.17.UXDB 驱动扩展·连接器
3.17.1.uxsql.Connector
-
功能
可复用的连接器,配合 sql.OpenDB 使用
-
函数
type Connector struct{} -
参数:无。
-
返回值
该类型为可复用的连接器结构体,用于配合 sql.OpenDB 使用。
3.17.2.uxsql.NewConnector
-
功能
按 DSN 创建连接器
-
函数
func NewConnector(dsn string) (*Connector, error) -
参数
表 NewConnector 参数说明
名称 描述 dsn(输入) 数据源名称(连接串)。 -
返回值
返回连接器 *Connector 和错误信息 error。
3.18.UXDB 驱动扩展·数组/复合类型
3.18.1.uxsql.Array
-
功能
把 Go 切片声明为 UXDB 数组参数
-
函数
func Array(a interface{}) interface{} -
参数
表 Array 参数说明
名称 描述 a(输入) Go 切片,用于声明为 UXDB 数组参数。 -
返回值
返回声明为 UXDB 数组参数的值。
3.18.2.uxsql.ArrayDelimiter
-
功能
自定义数组分隔符
-
函数
type ArrayDelimiter interface { ArrayDelimiter() string } -
参数:无。
-
返回值
该类型为自定义数组分隔符接口。
3.18.3.uxsql.BoolArray
-
功能
布尔数组
-
函数
type BoolArray []bool -
参数:无。
-
返回值
该类型为布尔数组,用于声明 UXDB 数组参数。
3.18.4.uxsql.ByteaArray
-
功能
字节数组(bytea[])
-
函数
type ByteaArray [][]byte -
参数:无。
-
返回值
该类型为字节数组(bytea[]),用于声明 UXDB 数组参数。
3.18.5.uxsql.Float64Array
-
功能
双精度浮点数组
-
函数
type Float64Array []float64 -
参数:无。
-
返回值
该类型为双精度浮点数组,用于声明 UXDB 数组参数。
3.18.6.uxsql.Int64Array
-
功能
64 位整型数组
-
函数
type Int64Array []int64 -
参数:无。
-
返回值
该类型为 64 位整型数组,用于声明 UXDB 数组参数。
3.18.7.uxsql.StringArray
-
功能
字符串数组
-
函数
type StringArray []string -
参数:无。
-
返回值
该类型为字符串数组,用于声明 UXDB 数组参数。
3.18.8.uxsql.GenericArray
-
功能
通用数组包装(元素实现 ArrayDelimiter)
-
函数
type GenericArray struct { A interface{} } -
参数:无。
-
返回值
该类型为通用数组包装,元素需实现 ArrayDelimiter 接口。
3.18.9.hstore.Hstore
-
功能
hstore 键值类型映射
-
函数
type Hstore map[string]NullString -
参数:无。
-
返回值
该类型为 hstore 键值类型映射。
3.19.UXDB 驱动扩展·COPY 批量
3.19.1.uxsql.CopyIn
-
功能
生成 COPY ... FROM STDIN 语句文本
-
函数
func CopyIn(table string, columns ...string) string -
参数
表 CopyIn 参数说明
名称 描述 table(输入) 目标表名。 columns(输入) 目标列名,可变参数。 -
返回值
返回 COPY ... FROM STDIN 语句文本。
3.19.2.uxsql.CopyInSchema
-
功能
生成带 schema 限定的 COPY ... FROM STDIN 语句文本
-
函数
func CopyInSchema(schema, table string, columns ...string) string -
参数
表 CopyInSchema 参数说明
名称 描述 schema(输入) 模式名。 table(输入) 目标表名。 columns(输入) 目标列名,可变参数。 -
返回值
返回带 schema 限定的 COPY ... FROM STDIN 语句文本。
3.20.UXDB 驱动扩展·异步通知
3.20.1.uxsql.Listener
-
功能
LISTEN/NOTIFY 异步通知监听器(自动重连)
-
函数
type Listener struct{} -
参数:无。
-
返回值
该类型为 LISTEN/NOTIFY 异步通知监听器(自动重连)。
3.20.2.uxsql.NewListener
-
功能
创建通知监听器
-
函数
func NewListener(name string, minReconnectInterval time.Duration, maxReconnectInterval time.Duration, eventCallback EventCallbackType) *Listener -
参数
表 NewListener 参数说明
名称 描述 name(输入) 监听的通道名。 minReconnectInterval(输入) 最小重连间隔。 maxReconnectInterval(输入) 最大重连间隔。 eventCallback(输入) 监听器事件回调函数。 -
返回值
返回通知监听器 *Listener。
3.20.3.uxsql.NewDialListener
-
功能
使用自定义 Dialer 创建通知监听器
-
函数
func NewDialListener(d Dialer, name string, minReconnectInterval, maxReconnectInterval time.Duration, eventCallback EventCallbackType) *Listener -
参数
表 NewDialListener 参数说明
名称 描述 d(输入) 自定义 Dialer。 name(输入) 监听的通道名。 minReconnectInterval(输入) 最小重连间隔。 maxReconnectInterval(输入) 最大重连间隔。 eventCallback(输入) 监听器事件回调函数。 -
返回值
返回通知监听器 *Listener。
3.20.4.uxsql.ListenerConn
-
功能
单个通知通道的连接封装
-
函数
type ListenerConn struct{} -
参数:无。
-
返回值
该类型为单个通知通道的连接封装。
3.20.5.uxsql.NewListenerConn
-
功能
建立通知通道连接
-
函数
func NewListenerConn(name string, notificationChan chan<- *Notification) (*ListenerConn, error) -
参数
表 NewListenerConn 参数说明
名称 描述 name(输入) 监听的通道名。 notificationChan(输出) 接收通知的通道。 -
返回值
返回通知通道连接 *ListenerConn 和错误信息 error。
3.20.6.uxsql.Notification
-
功能
一条异步通知(通道名、后端 PID、负载)
-
函数
type Notification struct { Channel, Extra string; BePid int32 } -
参数:无。
-
返回值
该类型为一条异步通知,含通道名、后端 PID 与负载。
3.20.7.uxsql.ListenerEventType
-
功能
监听器事件类型(连接/断开/出错)
-
函数
type ListenerEventType int -
参数:无。
-
返回值
该类型为监听器事件类型(连接/断开/出错)。
3.20.8.uxsql.EventCallbackType
-
功能
监听器事件回调函数
-
函数
type EventCallbackType func(event ListenerEventType, err error) -
参数:无。
-
返回值
该类型为监听器事件回调函数。
3.20.9.uxsql.ErrChannelAlreadyOpen
-
功能
通道已打开的错误
-
函数
var ErrChannelAlreadyOpen = errors.New("uxsql: channel is already open") -
参数:无。
-
返回值
该变量为 error 错误对象,表示通道已打开。
3.20.10.uxsql.ErrChannelNotOpen
-
功能
通道未打开的错误
-
函数
var ErrChannelNotOpen = errors.New("uxsql: channel is not open") -
参数:无。
-
返回值
该变量为 error 错误对象,表示通道未打开。
3.21.UXDB 驱动扩展·SQL 组装与转义
3.21.1.uxsql.QuoteIdentifier
-
功能
按 UXDB 规则引用标识符
-
函数
func QuoteIdentifier(name string) string -
参数
表 QuoteIdentifier 参数说明
名称 描述 name(输入) 需要引用的标识符。 -
返回值
返回按 UXDB 规则引用后的标识符字符串。
3.21.2.uxsql.QuoteLiteral
-
功能
按 UXDB 规则引用字面量
-
函数
func QuoteLiteral(literal string) string -
参数
表 QuoteLiteral 参数说明
名称 描述 literal(输入) 需要引用的字面量。 -
返回值
返回按 UXDB 规则引用后的字面量字符串。
3.21.3.uxsql.ParseURL
-
功能
把 URL 形式连接串转换为键值对连接串
-
函数
func ParseURL(url string) (string, error) -
参数
表 ParseURL 参数说明
名称 描述 url(输入) URL 形式连接串。 -
返回值
返回键值对连接串和错误信息 error。
3.21.4.uxsql.FormatTimestamp
-
功能
把 time.Time 格式化为 UXDB 时间戳字面量
-
函数
func FormatTimestamp(t time.Time) []byte -
参数
表 FormatTimestamp 参数说明
名称 描述 t(输入) 需要格式化的时间。 -
返回值
返回格式化为 UXDB 时间戳字面量的字节切片。
3.21.5.uxsql.ParseTimestamp
-
功能
解析 UXDB 时间戳为 time.Time
-
函数
func ParseTimestamp(currentLocation *time.Location, str string) (time.Time, error) -
参数
表 ParseTimestamp 参数说明
名称 描述 currentLocation(输入) 解析时使用的时区。 str(输入) UXDB 时间戳字符串。 -
返回值
返回解析后的时间 time.Time 和错误信息 error。
3.21.6.uxsql.EnableInfinityTs
-
功能
开关 ±infinity 时间戳的映射
-
函数
func EnableInfinityTs(negative time.Time, positive time.Time) -
参数
表 EnableInfinityTs 参数说明
名称 描述 negative(输入) -infinity 时间戳映射的时间值。 positive(输入) +infinity 时间戳映射的时间值。 -
返回值
无返回值。
3.21.7.uxsql.NullTime
-
功能
可空时间类型
-
函数
type NullTime struct { Time time.Time; Valid bool } -
参数:无。
-
返回值
该类型为可空时间类型。
3.22.UXDB 驱动扩展·错误处理
3.22.1.uxsql.Error
-
功能
UXDB 服务端返回的错误,含 SQLSTATE 与诊断字段
-
函数
type Error struct{} -
参数:无。
-
返回值
该类型为 UXDB 服务端返回的错误,含 SQLSTATE 与诊断字段。
3.22.2.uxsql.ErrorCode
-
功能
SQLSTATE 错误码(5 位)
-
函数
type ErrorCode string -
参数:无。
-
返回值
该类型为 SQLSTATE 错误码(5 位)。
3.22.3.uxsql.ErrorClass
-
功能
SQLSTATE 错误类别(前 2 位)
-
函数
type ErrorClass string -
参数:无。
-
返回值
该类型为 SQLSTATE 错误类别(前 2 位)。
3.22.4.uxsql.UXError
-
功能
可提取错误码的接口
-
函数
type UXError interface { Error() string; UXCode() ErrorCode } -
参数:无。
-
返回值
该类型为可提取错误码的接口。