Golang接口
- Golang使用UXDB数据库,需要使用uxdb-golang模块来连接,Linux平台也可以使用该模块进行连接。
-
安装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环境安装成功。
-
-
创建环境并连接数据库
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=123456 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: 男 数据库已关闭
-