go-driver
Go数据库驱动
编译
Mysql
# 下载镜像
docker pull mysql:5.7
#运行一个容器
docker run -itd --name mysql-3306 -m 1024m -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#停止容器
docker stop mysql-3306
#删除容器
docker rm mysql-3306
package main
import (
"fmt"
"sorm/driver/db_mysql"
"testing"
)
func TestMysql(t *testing.T) {
dsn := db_mysql.GetDSN("root", "123456", "127.0.0.1", 3306, "")
db, err := db_mysql.Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}
Sqlite3
package main
import (
"fmt"
"sorm/driver/db_sqlite3"
"testing"
)
func TestSqlite3(t *testing.T) {
dsn := db_sqlite3.GetDSN("test-sqlite3")
db, err := db_sqlite3.Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}
达梦
# 下载镜像
docker pull teamide/dm8:v201106
#运行一个容器
docker run -itd --name dm-5236 -p 5236:5236 teamide/dm8:v201106
#停止容器
docker stop dm-5236
#删除容器
docker rm dm-5236
# 端口: 5236
# 用户名: SYSDBA
# 密码: SYSDBA
package main
import (
"fmt"
"sorm/driver/db_dm"
"testing"
)
func TestDm(t *testing.T) {
dsn := db_dm.GetDSN("SYSDBA", "SYSDBA", "127.0.0.1", 5236)
db, err := db_dm.Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}
金仓
# 下载镜像
docker pull teamide/kingbase:v8r3
#运行一个容器
docker run -itd --name kingbase-54321 -p 54321:54321 -e SYSTEM_USER=SYSTEM -e SYSTEM_PWD=123456 teamide/kingbase:v8r3
#停止容器
docker stop kingbase-54321
#删除容器
docker rm kingbase-54321
# 端口: 54321
# 用户名: SYSTEM
# 密码: 123456
# 默认数据库: TEST
package main
import (
"fmt"
"sorm/driver/db_kingbase_v8r6"
"testing"
)
func TestKingBase(t *testing.T) {
dsn := db_kingbase_v8r6.GetDSN("SYSTEM", "123456", "127.0.0.1", 54321, "TEST")
db, err := db_kingbase_v8r6.Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}
神通
# 下载镜像
docker pull teamide/shentong:7.0.8
#运行一个容器
docker run -itd --name shentong-2003 -p 2003:2003 teamide/shentong:7.0.8
#停止容器
docker stop shentong-2003
#删除容器
docker rm shentong-2003
# 端口: 2003
# 用户名: sysdba
# 密码: szoscar55
# 默认数据库: OSRDB
window 环境配置
# 配置 动态链接库
# 将go-driver/driver/shentong/go-aci/lib/win64/aci.dll 复制 到 C:/Windows/System32 下
# 或 将 aci.dll 放在程序目录
linux 环境配置
# 将go-driver/driver/shentong/go-aci/lib/linux64/libaci.so 复制 到 /usr/lib64/ 下
# 或 配置 动态链接库
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:go-driver/driver/shentong/go-aci/lib/linux64/
package main
import (
"fmt"
"sorm/driver/db_shentong"
"testing"
)
func TestShenTong(t *testing.T) {
dsn := db_shentong.GetDSN("SYSDBA", "szoscar55", "127.0.0.1", 2003, "OSRDB")
db, err := db_shentong.Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}
Oracle
# 下载镜像
docker pull teamide/oracle-xe-11g:1.0
#运行一个容器
docker run -itd --name oracle-1521 -p 1521:1521 teamide/oracle-xe-11g:1.0
#停止容器
docker stop oracle-1521
#删除容器
docker rm oracle-1521
# 端口: 1521
# 用户名: root
# 密码: 123456
# SID: xe
window 环境配置
- 方案一:
- 安装oracle 64位客户端
- 配置环境path,将客户端的目录,比如 c:\oracle\product\11.2.0\client_1\bin 配置到path中
- 配置环境变量ORACLE_HOME目录设置为如 c:\oracle\product\11.2.0\client_1 后,问题解决。
- 方案二:
- 下载轻量级的Oracle客户端: 比如 instantclient-basic-windows.x64-11.2.0.4.0.zip
- 配置环境变量path:将客户端的目录,比如 c:\oracle\instantclient_11_2 添加到 path
- 配置环境变量ORACL_HOME: 将客户端的上一级目录 ,比如 c:\oracle 设置为ORACLE_HOME的值
linux 环境配置
-
方案一:
- 下载轻量级的oracle客户端并解压安装
- 配置环境变量LD_LIBRARY_PATH=[oracle客户端安装目录]:$LD_LIBRARY_PATH ,NLS_LANG=[oracle数据库NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET] ,并添加到 ~/.bash_profile 中
- 重新登录系统 或 source ~/.bash_profile 使环境变量生效
-
程序调用
package main
import (
"fmt"
"sorm/driver/db_oracle"
"testing"
)
func TestOracle(t *testing.T) {
dsn := db_oracle.GetDSN("root", "123456", "127.0.0.1", 1521, "xe")
db, err := db_oracle.Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2 from dual`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}
Postgresql
# 下载镜像
docker pull postgres:11.14
#运行一个容器
docker run -itd --name postgres-5432 -p 5432:5432 -e POSTGRES_PASSWORD=123456 postgres:11.14
#停止容器
docker stop postgres-5432
#删除容器
docker rm postgres-5432
# 端口: 5432
# 用户名: postgres
# 密码: 123456
# 默认数据库: postgres
package main
import (
"fmt"
"sorm/driver/db_postgresql"
"testing"
)
func TestPostgresql(t *testing.T) {
dsn := db_postgresql.GetDSN("postgres", "123456", "127.0.0.1", 5432, "postgres")
db, err := db_postgresql.Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}
GBase
# 下载镜像
docker pull teamide/gbase8s:3.3.0_2_amd64
#运行一个容器
docker run -itd --name gbase-9088 -p 9088:9088 teamide/gbase8s:3.3.0_2_amd64
#停止容器
docker stop gbase-9088
#删除容器
docker rm gbase-9088
# 端口: 9088
# 用户名: gbasedbt
# 密码: GBase123
# 默认数据库: OSRDB
-
GBase 相关资源文档
-
window 配置 odbc
# 下载 https://gbasedbt.com/dl/odbc/GBase8s_3.0-Win64-ODBC-Driver.zip
# 解压
# 使用管理员权限运行00注册ODBC_管理员权限运行.cmd,注册ODBC驱动
# 打开window odbc配置,添加GBase驱动
package main
import (
"fmt"
"sorm/driver/db_gbase"
"testing"
)
func TestGBase(t *testing.T) {
dsn := `DRIVER=com.gbasebt.jdbc.Driver;NEWCODESET=UTF8,zh_cn.UTF8,57372;DB_LOCALE=zh_cn.57372;DELIMIDENT=Y;CLIENT_LOCALE=zh_cn.57372;ServerName=gbase01;host=127.0.0.1;service=9088;uid=gbasedbt;pwd=GBase123;DATABASE=JOB1;`
db, err := db_gbase.Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2 from dual`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}
OpenGauss
# 下载镜像
docker pull enmotech/opengauss:3.1.0
# 运行一个容器
docker run -itd --name opengauss-5432 -p 5432:5432 -e GS_PASSWORD=Enmo@1234 enmotech/opengauss:3.1.0
# GS_PASSWORD:设置openGauss数据库的超级用户omm以及测试用户gaussdb的密码。如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码。包含大写、小写、数字、特殊字符和密码长度(最小8)
# GS_NODENAME:数据库节点名称,默认为gaussdb。
# GS_USERNAME:数据库连接用户名,默认为gaussdb。
# GS_PORT:数据库端口,默认为5432
#停止容器
docker stop opengauss-5432
#删除容器
docker rm opengauss-5432
# 端口: 5432
# 用户名: gaussdb
# 密码: Enmo@1234
# 默认数据库: postgres
package db_opengauss
import (
"fmt"
"testing"
)
func TestDb(t *testing.T) {
dsn := GetDSN("gaussdb", "Enmo@1234", "127.0.0.1", 5432, "postgres")
db, err := Open(dsn)
if err != nil {
panic(err)
}
sql := `select 2`
var count int
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
rows.Next()
err = rows.Scan(&count)
if err != nil {
panic(err)
}
fmt.Printf("result:%d\n", count)
if count == 2 {
fmt.Println("test success")
} else {
panic("test fail")
}
}